Android Studio开发实战:从零基础到App上线 (移动开发丛书)
上QQ阅读APP看书,第一时间看更新

4.1 共享参数SharedPreferences

本节介绍Android的键值对存储方式—— 共享参数SharedPreferences的使用方法,包括如何保存数据与读取数据,通过共享参数结合“登录App”项目实现记住密码功能。

4.1.1 基本用法

SharedPreferences是Android的一个轻量级存储工具,采用的存储结构是Key-Value的键值对方式,类似于Java的Properties类,二者都是把Key-Value的键值对保存在配置文件中。不同的是Properties的文件内容是Key=Value这样的形式,而SharedPreferences的存储介质是符合XML规范的配置文件。保存SharedPreferences键值对信息的文件路径是/data/data/应用包名/shared_prefs/文件名.xml。下面是一个共享参数的XML文件示例:

        <? xml version='1.0' encoding='utf-8' standalone='yes' ? >
        <map>
            <string name="name">Mr Lee</string>
            <int name="age" value="30" />
            <boolean name="married" value="true" />
            <float name="weight" value="100.0" />
        </map>

基于XML格式的特点,SharedPreferences主要适用于如下场合:

(1)简单且孤立的数据。若是复杂且相互间有关的数据,则要保存在数据库中。

(2)文本形式的数据。若是二进制数据,则要保存在文件中。

(3)需要持久化存储的数据。在App退出后再次启动时,之前保存的数据仍然有效。

实际开发中,共享参数经常存储的数据有App的个性化配置信息、用户使用App的行为信息、临时需要保存的片段信息等。

SharedPreferences对数据的存储和读取操作类似于Map,也有put函数用于存储数据、get函数用于读取数据。在使用共享参数之前,要先调用getSharedPreferences函数声明文件名与操作模式,示例代码如下:

                SharedPreferences sps= getSharedPreferences("share", Context.MODE_PRIVATE);

getSharedPreferences方法的第一个参数是文件名,上面的share表示当前使用的共享参数文件名是share.xml;第二个参数是操作模式,一般都填MODE_PRIVATE,表示私有模式。

共享参数存储数据要借助于Editor类,示例代码如下:

                SharedPreferences.Editor editor = sps.edit();
                editor.putString("name", "Mr Lee");
                editor.putInt("age", 30);
                editor.putBoolean("married", true);
                editor.putFloat("weight", 100f);
                editor.commit();

共享参数读取数据相对简单,直接使用对象即可完成数据读取方法的调用,注意get方法的第二个参数表示默认值,示例代码如下:

                String name = sps.getString("name", "");
                int age = sps.getInt("age", 0);
                boolean married = sps.getBoolean("married", false);
                float weight = sps.getFloat("weight", 0);

下面通过页面录入信息演示SharedPreferences的存取过程,如图4-1所示。在页面上利用EditText录入用户注册信息,并保存到共享参数文件中。在另一个页面,App从共享参数文件中读取用户注册信息,并将注册信息依次显示在页面中,如图4-2所示。

图4-1 写入共享参数

图4-2 从共享参数读取

4.1.2 实现记住密码功能

上一章的实战项目“登录App”页面下方有一个“记住密码”复选框,当时只是为了演示控件的运用,并未真正记住密码。因为用户退出后重新进入登录页面,App没有回忆起上次用户的登录密码。现在我们利用共享参数对该项目进行改造,使之实现记住密码的功能。

改造的内容主要有3处:

(1)声明一个SharedPreferences对象,并在onCreate函数中调用getSharedPreferences方法对该对象进行初始化操作。

(2)登录成功时,如果用户勾选了“记住密码”,就使用共享参数保存手机号码与密码。在loginSuccess函数中增加如下代码:

                if (bRemember) {
                    SharedPreferences.Editor editor = mShared.edit();
                    editor.putString("phone", et_phone.getText().toString());
                    editor.putString("password", et_password.getText().toString());
                    editor.commit();
                }

(3)在打开登录页面时,App从共享参数中读取手机号码与密码,并展示在界面上。在onCreate函数中增加如下代码:

                String phone = mShared.getString("phone", "");
                String password = mShared.getString("password", "");
                et_phone.setText(phone);
                et_password.setText(password);

修改完毕后,如果不出意料,只要用户上次登录成功时勾选“记住密码”,下次进入登录页面时App就会自动填写上次登录的手机号码与密码。具体的效果如图4-3和图4-4所示。其中,图4-3所示为用户首次登录成功,此时勾选了“记住密码”;图4-4所示为用户再次进入登录页面,因为上次登录成功时已经记住密码,所以这次页面会自动展示保存的登录信息。

图4-3 将登录信息保存到共享参数

图4-4 从共享参数读取登录信息