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

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格式的特點,SharedPreferences主要適用于如下場合:

(1)簡單且孤立的數據。若是復雜且相互間有關的數據,則要保存在數據庫中。

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

(3)需要持久化存儲的數據。在App退出后再次啟動時,之前保存的數據仍然有效。

實際開發中,共享參數經常存儲的數據有App的個性化配置信息、用戶使用App的行為信息、臨時需要保存的片段信息等。

SharedPreferences對數據的存儲和讀取操作類似于Map,也有put函數用于存儲數據、get函數用于讀取數據。在使用共享參數之前,要先調用getSharedPreferences函數聲明文件名與操作模式,示例代碼如下:

     // 從share.xml中獲取共享參數對象
     SharedPreferences shared = getSharedPreferences("share", MODE_PRIVATE);

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

共享參數存儲數據要借助于Editor類,示例代碼如下:

     SharedPreferences.Editor editor = shared.edit();  // 獲得編輯器的對象
     editor.putString("name", "Mr Lee");  // 添加一個名叫name的字符串參數
     editor.putInt("age", 30);  // 添加一個名叫age的整型參數
     editor.putBoolean("married", true);  // 添加一個名叫married的布爾型參數
     editor.putFloat("weight", 100f);  // 添加一個名叫weight的浮點數參數
     editor.commit();  // 提交編輯器中的修改

共享參數讀取數據相對簡單,直接使用對象即可完成數據讀取方法的調用,注意get方法的第二個參數表示默認值,示例代碼如下:

     String name = shared.getString("name", "");  // 從共享參數中獲得名叫name的字符串
     int age = shared.getInt("age", 0);  // 從共享參數中獲得名叫age的整型數
     boolean married = shared.getBoolean("married", false);  // 從共享參數中獲得名叫married的布爾數
     float weight = shared.getFloat("weight", 0);  // 從共享參數中獲得名叫weight的浮點數

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

圖4-1 寫入共享參數

圖4-2 從共享參數讀取

4.1.2 實現記住密碼功能

上一章的實戰項目“登錄App”頁面下方有一個“記住密碼”復選框,當時只是為了演示控件的運用,并未真正記住密碼。因為用戶退出后重新進入登錄頁面,App沒有回憶起上次用戶的登錄密碼。現在利用共享參數對該項目進行改造,使之實現記住密碼的功能。

改造的內容主要有3處:

(1)聲明一個SharedPreferences對象,并在onCreate函數中調用getSharedPreferences方法對該對象進行初始化操作。

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

(3)在打開登錄頁面時,App從共享參數中讀取手機號碼與密碼,并展示在界面上。也就是在onCreate函數中增加如下代碼:

     // 從share.xml中獲取共享參數對象
     mShared = getSharedPreferences("share_login", MODE_PRIVATE);
     // 獲取共享參數中保存的手機號碼
     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 從共享參數讀取登錄信息

主站蜘蛛池模板: 新闻| 漳州市| 万安县| 呼图壁县| 福建省| 普安县| 呈贡县| 廉江市| 九龙城区| 阿勒泰市| 洛南县| 离岛区| 西畴县| 双桥区| 福清市| 镇沅| 湘西| 遂宁市| 古丈县| 黑水县| 大埔县| 连江县| 荔浦县| 东兰县| 车致| 都江堰市| 大田县| 阿合奇县| 云浮市| 宁河县| 凌云县| 阿拉善左旗| 仙居县| 华宁县| 广宗县| 饶河县| 云安县| 柳河县| 绥芬河市| 利川市| 鞍山市|