Android客户端:登陆功能开发
来自CloudWiki
目录
功能需求
已知已注册可登录的账号用户名为 gw001,密码是 00000。
视图层,界面实现
根据原型图设计实现登录窗口 View
控制层,用户登录输入处理
点击登录窗口的―登录‖按钮之后,读取用户在输入框输入的用户名和密码。
服务层,用户信息后台登录验证
根据前面 SDK 的了解,我们知道 Keystone 服务负责用户的认证和授权,这里调用
Keystone 的认证,传递的参数为用户名和密码。
控制层,认证返回结果处理
认证返回值处理:认证可能的情况包含:
(1)没有联网,服务不能访问,提示用户联网; (2)账户和密码都正确,验证通过,自动登录,展示网盘主窗口。 (3)账户不正确,验证不通过,提示用户重新输入账户和密码。 (4)密码不正确,验证不通过,提示用户重新输入账户和密码。 (5)连续输入 3 次不正确,提示用户找回密码。通过邮件的方式找回。
图 6-2 登录界面原型图
实现步骤
导入项目
运行 Android Studio,选择 File\Open..,点击弹出选择 project64 目录下面的项目 ―swiftstorage‖,
清单目录
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xiandian.openstack.cloud.swiftstorage" android:versionCode="1" android:versionName="1.0"> <!-- (1) 增加权限,能够访问网络、拍照、存储 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> </activity> <activity android:name=".LoginActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen" android:windowSoftInputMode="stateHidden|adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>>
界面实现
登录布局包含5 个组件,从上到下依次为:图标(ImageView)、用户输入框(EditText)、密码输入框(EditText)、登录按钮(Button),注册按钮(TextView),及最下面一个进度条(ProgressBar)。几个组件的说明如表 6-1 所示。
此布局的路径 app\src\main\res\layout\login.xml。
表 6-1 登录相关组件
组件 作用 ID ImageView 图标 imageLogo EditText 用户名输入框 txtUsername EditText 密码输入框 txtPassword Button 登录按钮 btnLogin TextView 注册按钮 register ProgressBar 显示登录进度的进度条 servicesProgressBar
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="vertical" android:paddingLeft="10dp" android:paddingRight="10dp" > <LinearLayout android:layout_width="fill_parent" android:layout_height="100dp" android:gravity="center" > <ImageView android:id="@+id/imageLogo" android:layout_width="96dp" android:layout_height="96dp" android:contentDescription="@string/app_name" android:src="@mipmap/ic_logo" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/txtUsername" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.75" android:ems="10" android:hint="@string/login_hint_username" android:inputType="textNoSuggestions" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/txtPassword" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.75" android:ems="10" android:hint="@string/login_hint_password" android:inputType="textPassword" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="25dp" > <Button android:id="@+id/btnLogin" android:layout_width="fill_parent" android:layout_height="wrap_content" android:ems="5" android:text="@string/login_button" /> <TextView android:id="@+id/register" android:layout_width="50dp" android:layout_height="20dp" android:text="@string/register_button" android:gravity="center" android:layout_gravity="right"/> </LinearLayout> <ProgressBar android:id="@+id/servicesProgressBar" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
实现登录视图 LoginActivity
此 Activity 所在路径为 app\src\main\java\com.xiandian.openstack.cloud.swiftstorage\ LoginActivity.java。
此处的登录视图项目 4Android 基础中已经详细介绍,接下来有关登录的方法都是在此 Java 类中实现。