第八个项目——登陆界面2

实验目的

  • 掌握SharedPreferences进行轻量级数据存储的方法;

实验要求

  • 使用SharedPreferences保存用户登录信息;

  • 使用SharedPreferences读取用户登录信息,并填充相应控件;

实验内容

步骤一,打开Code06项目

使用Android Studio打开Code06项目。

步骤二,新增CheckBox控件提供记住密码选项

为该项目添加一个CheckBox控件,用于向用户提供是否保存用户名密码的选项。当用户勾选该控件,并点击Login登录按钮时,将用户所填写的用户名、密码保存至SharedPreferences中,当用户下次启动App时,从指定的SharedPreferences文件中读取用户名、密码填充至相应的EditText控件中。App最终运行效果如图1. Code06新增记住用户名密码选项框所示。

图1. Code06新增记住用户名密码选项框

1. 调整activity_login.xml布局文件

打开activity_login.xml文件,在密码EditText控件所在的RelativeLayout布局下方加入一个新的RelativeLayout布局,并在该布局中加入CheckBox控件。此外,还在该RelativeLayout中加入了一个TextView控件用于进行用户账号注册跳转使用,布局代码如下所示。

步骤三,添加Login登录按钮保存用户账号及密码逻辑

当用户点击Login登录按钮时,App根据用户是否勾选Remember Password复选框决定是否将用户账号、密码等信息保存至SharedPreferences文件。

1. 定义SharedPreferences文件名等相关字符串资源

将需要操作的SharedPreferences文件名、保存的用户名、密码等Key存储于string.xml字符串资源中,有利于在App全局范围内维护这些信息。代码如下所示。

2. 存储用户信息进SharedPreferences

LoginActivity类的onCreate方法中首先获取用户名、密码、记住密码、登录等几个控件对应的对象。

当点击Login按钮时,检测cbRememberPwd按钮是否被勾选,如果被勾选则获得指定的SharedPreferences对象,并将用户名、密码保存进SharedPreferences中。如果未被勾选,则应该清除掉之前保存在SharedPreferences中的用户名、密码。

其中获取SharedPreferences对象文件名、用户名、密码Key的字符串资源使用Resources对象的getString()方法,该方法接收一个int型资源id, 可以使用R.string.XXXXX表示,其中XXXXX中为在string.xml文件中的定义的字符串资源名。

通过getSharedPreferences方法获得SharedPreferences对象,并通过SharedPreferences.Editor进行编辑操作。

3. 读取SharedPreferences存储的用户账号信息

Login按钮中对用户账号等数据存储入SharedPreferences或删除SharedPreferences中存储的用户账号数据。 而要加载SharedPreferences中存储的用户账号信息,最恰当的时机是在ActivityonCreate()方法中。

读取SharedPreferences中存储的键值对可使用getString()等方法,该方法第一个参数是键值对的key,第二个参数则为默认值。

步骤四,编译、部署APK

编译并部署Code06项目的APK,运行效果如图1. Code06新增记住用户名密码选项框所示。 首先填入用户名及密码,并勾选记住密码复选框,点击Login登录按钮; 将App杀掉后,重新启动App观察启动后登录页面中的用户名、密码文本框是否进行了初始化设置。

图2. Device file Explorer查看App私有数据

SharedPreferences所存储的xml文件存放于设备的/data/data/[package_name]/shared_prefs目录下,其中package_nameApp的包名。可以通过Android Studio中的Device File Explorer工具查看这些文件,如图2. Device file Explorer查看App私有数据所示。

步骤五,将Code06项目代码及资源并入Code07

Code06项目的代码资源并入Code07项目中,实现用户点击Login按钮后,跳转至新闻列表页。 其中需要合并的代码及资源包括:

  • LoginActivity.java

  • activity_login.xml

  • string.xml

  • styles.xml

  • res/drawable文件夹

  • mipmap-XXXX中的ic_logo.png等png图片

Code07AndroidManifest.xml文件中注册LoginActivity,并将其作为启动活动,代码如下所示。

实验小结

通过本次实验,你应该掌握了如下知识内容:

  • 使用SharedPreferences存取键值对数据;

  • 清除SharedPreferences中存储的键值对数据;

Last updated

Was this helpful?