Android客户端:登陆功能开发

来自CloudWiki
跳转至: 导航搜索

功能需求

已知已注册可登录的账号用户名为 gw001,密码是 00000。

视图层,界面实现

根据原型图设计实现登录窗口 View

控制层,用户登录输入处理

点击登录窗口的―登录‖按钮之后,读取用户在输入框输入的用户名和密码。

服务层,用户信息后台登录验证

根据前面 SDK 的了解,我们知道 Keystone 服务负责用户的认证和授权,这里调用

Keystone 的认证,传递的参数为用户名和密码。

控制层,认证返回结果处理

认证返回值处理:认证可能的情况包含:

(1)没有联网,服务不能访问,提示用户联网; (2)账户和密码都正确,验证通过,自动登录,展示网盘主窗口。 (3)账户不正确,验证不通过,提示用户重新输入账户和密码。 (4)密码不正确,验证不通过,提示用户重新输入账户和密码。 (5)连续输入 3 次不正确,提示用户找回密码。通过邮件的方式找回。

文件:And1-2.png

图 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 类中实现。