官术网_书友最值得收藏!

4.1 共享參數(shù)SharedPreferences

本節(jié)介紹Android的鍵值對(duì)存儲(chǔ)方式—— 共享參數(shù)SharedPreferences的使用方法,包括如何保存數(shù)據(jù)與讀取數(shù)據(jù),通過(guò)共享參數(shù)結(jié)合“登錄App”項(xiàng)目實(shí)現(xiàn)記住密碼功能。

4.1.1 基本用法

SharedPreferences是Android的一個(gè)輕量級(jí)存儲(chǔ)工具,采用的存儲(chǔ)結(jié)構(gòu)是Key-Value的鍵值對(duì)方式,類(lèi)似于Java的Properties類(lèi),二者都是把Key-Value的鍵值對(duì)保存在配置文件中。不同的是Properties的文件內(nèi)容是Key=Value這樣的形式,而SharedPreferences的存儲(chǔ)介質(zhì)是符合XML規(guī)范的配置文件。保存SharedPreferences鍵值對(duì)信息的文件路徑是/data/data/應(yīng)用包名/shared_prefs/文件名.xml。下面是一個(gè)共享參數(shù)的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格式的特點(diǎn),SharedPreferences主要適用于如下場(chǎng)合:

(1)簡(jiǎn)單且孤立的數(shù)據(jù)。若是復(fù)雜且相互間有關(guān)的數(shù)據(jù),則要保存在數(shù)據(jù)庫(kù)中。

(2)文本形式的數(shù)據(jù)。若是二進(jìn)制數(shù)據(jù),則要保存在文件中。

(3)需要持久化存儲(chǔ)的數(shù)據(jù)。在App退出后再次啟動(dòng)時(shí),之前保存的數(shù)據(jù)仍然有效。

實(shí)際開(kāi)發(fā)中,共享參數(shù)經(jīng)常存儲(chǔ)的數(shù)據(jù)有App的個(gè)性化配置信息、用戶使用App的行為信息、臨時(shí)需要保存的片段信息等。

SharedPreferences對(duì)數(shù)據(jù)的存儲(chǔ)和讀取操作類(lèi)似于Map,也有put函數(shù)用于存儲(chǔ)數(shù)據(jù)、get函數(shù)用于讀取數(shù)據(jù)。在使用共享參數(shù)之前,要先調(diào)用getSharedPreferences函數(shù)聲明文件名與操作模式,示例代碼如下:

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

getSharedPreferences方法的第一個(gè)參數(shù)是文件名,上面的share表示當(dāng)前使用的共享參數(shù)文件名是share.xml;第二個(gè)參數(shù)是操作模式,一般都填MODE_PRIVATE,表示私有模式。

共享參數(shù)存儲(chǔ)數(shù)據(jù)要借助于Editor類(lèi),示例代碼如下:

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

共享參數(shù)讀取數(shù)據(jù)相對(duì)簡(jiǎn)單,直接使用對(duì)象即可完成數(shù)據(jù)讀取方法的調(diào)用,注意get方法的第二個(gè)參數(shù)表示默認(rèn)值,示例代碼如下:

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

下面通過(guò)頁(yè)面錄入信息演示SharedPreferences的存取過(guò)程,如圖4-1所示。在頁(yè)面上利用EditText錄入用戶注冊(cè)信息,并保存到共享參數(shù)文件中。在另一個(gè)頁(yè)面,App從共享參數(shù)文件中讀取用戶注冊(cè)信息,并將注冊(cè)信息依次顯示在頁(yè)面中,如圖4-2所示。

圖4-1 寫(xiě)入共享參數(shù)

圖4-2 從共享參數(shù)讀取

4.1.2 實(shí)現(xiàn)記住密碼功能

上一章的實(shí)戰(zhàn)項(xiàng)目“登錄App”頁(yè)面下方有一個(gè)“記住密碼”復(fù)選框,當(dāng)時(shí)只是為了演示控件的運(yùn)用,并未真正記住密碼。因?yàn)橛脩敉顺龊笾匦逻M(jìn)入登錄頁(yè)面,App沒(méi)有回憶起上次用戶的登錄密碼。現(xiàn)在我們利用共享參數(shù)對(duì)該項(xiàng)目進(jìn)行改造,使之實(shí)現(xiàn)記住密碼的功能。

改造的內(nèi)容主要有3處:

(1)聲明一個(gè)SharedPreferences對(duì)象,并在onCreate函數(shù)中調(diào)用getSharedPreferences方法對(duì)該對(duì)象進(jìn)行初始化操作。

(2)登錄成功時(shí),如果用戶勾選了“記住密碼”,就使用共享參數(shù)保存手機(jī)號(hào)碼與密碼。在loginSuccess函數(shù)中增加如下代碼:

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

(3)在打開(kāi)登錄頁(yè)面時(shí),App從共享參數(shù)中讀取手機(jī)號(hào)碼與密碼,并展示在界面上。在onCreate函數(shù)中增加如下代碼:

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

修改完畢后,如果不出意料,只要用戶上次登錄成功時(shí)勾選“記住密碼”,下次進(jìn)入登錄頁(yè)面時(shí)App就會(huì)自動(dòng)填寫(xiě)上次登錄的手機(jī)號(hào)碼與密碼。具體的效果如圖4-3和圖4-4所示。其中,圖4-3所示為用戶首次登錄成功,此時(shí)勾選了“記住密碼”;圖4-4所示為用戶再次進(jìn)入登錄頁(yè)面,因?yàn)樯洗蔚卿洺晒r(shí)已經(jīng)記住密碼,所以這次頁(yè)面會(huì)自動(dòng)展示保存的登錄信息。

圖4-3 將登錄信息保存到共享參數(shù)

圖4-4 從共享參數(shù)讀取登錄信息

主站蜘蛛池模板: 云和县| 固阳县| 蒲江县| 南昌县| 睢宁县| 延庆县| 文登市| 三河市| 永福县| 齐齐哈尔市| 长子县| 新源县| 镇平县| 石楼县| 崇阳县| 内江市| 鲜城| 三亚市| 灵石县| 马边| 郸城县| 辽阳县| 麻城市| 奎屯市| 喀喇沁旗| 沅陵县| 梓潼县| 奎屯市| 肇源县| 克什克腾旗| 义马市| 长丰县| 库伦旗| 大同市| 织金县| 五峰| 离岛区| 衢州市| 霍山县| 香河县| 芒康县|