書(shū)名: Android Studio開(kāi)發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到App上線 (移動(dòng)開(kāi)發(fā)叢書(shū))作者名: 歐陽(yáng)燊本章字?jǐn)?shù): 1231字更新時(shí)間: 2020-11-28 17:31:43
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ù)讀取登錄信息
- Mastering Ember.js
- PostgreSQL 11從入門(mén)到精通(視頻教學(xué)版)
- C++程序設(shè)計(jì)基礎(chǔ)教程
- 匯編語(yǔ)言程序設(shè)計(jì)(第3版)
- Protocol-Oriented Programming with Swift
- Python High Performance Programming
- Building Microservices with .NET Core
- Extreme C
- 區(qū)塊鏈國(guó)產(chǎn)化實(shí)踐指南:基于Fabric 2.0
- Programming Microsoft Dynamics? NAV 2015
- PHP與MySQL權(quán)威指南
- Exploring SE for Android
- Go語(yǔ)言入門(mén)經(jīng)典
- JavaScript Concurrency
- SQL Server 2008實(shí)用教程(第3版)