- Android Studio開發實戰:從零基礎到App上線(第2版)
- 歐陽燊
- 1454字
- 2019-12-06 12:07:26
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 從共享參數讀取登錄信息