SharedPreferences是Android平臺(tái)上的一種輕量級(jí)的數(shù)據(jù)保存方式,主要用來(lái)存儲(chǔ)一些簡(jiǎn)單的配置信息,例如一些默認(rèn)歡迎語(yǔ)、登錄的用戶名和密碼等。通過(guò)SharedPreferences可以將NVP(Name-Value Pair,名稱(chēng)-值對(duì))保存在Android的文件系統(tǒng)中,而且SharedPreferences對(duì)文件系統(tǒng)的操作過(guò)程完全屏蔽,這使得開(kāi)發(fā)人員僅需通過(guò)調(diào)用SharedPreferences對(duì)NVP很方便地進(jìn)行保存和讀取。SharedPreferences不僅能夠保存數(shù)據(jù),還能夠?qū)崿F(xiàn)不同應(yīng)用程序間的數(shù)據(jù)共享。
SharedPreferences支持3種訪問(wèn)模式。
□ 私有(MODE_PRIVATE):只有創(chuàng)建程序有讀取或?qū)懭隨haredPreferences的權(quán)限。
□ 全局讀(MODE_WORLD_READABLE):不僅創(chuàng)建程序有讀取或?qū)懭隨haredPreferences的權(quán)限,其他應(yīng)用程序也有讀取操作的權(quán)限,但沒(méi)有寫(xiě)入操作的權(quán)限。
□ 全局寫(xiě)(MODE_WORLD_WRITEABLE):創(chuàng)建程序和其他程序都可以對(duì)其進(jìn)行寫(xiě)入操作,但沒(méi)有讀取的權(quán)限。
在使用SharedPreferences之前,需先定義SharedPreferences的訪問(wèn)模式。代碼清單7-1所示的代碼將訪問(wèn)模式定義為私有模式。
代碼清單7-1 定義SharedPreferences私有訪問(wèn)模式
public static int MODE = MODE_PRIVATE;
有的時(shí)候需要將SharedPreferences的訪問(wèn)模式設(shè)定為全局讀/寫(xiě)模式,這時(shí)就需要其既可以全局讀MODE_WORLD_READABLE,又可以全局寫(xiě)MODE_WORLD_WRITEABLE,這樣就需要寫(xiě)成代碼清單7-2所示的代碼方式:
代碼清單7-2 定義SharedPreferences全局讀/寫(xiě)模式
public static int MODE = Context.MODE_WORLD_READABLE +
Context.MODE_WORLD_WRITEABLE;
在定義完SharedPreferences的訪問(wèn)模式之后,需定義SharedPreferences的名稱(chēng)(如代碼清單7-3所示),這個(gè)名稱(chēng)與在Android文件系統(tǒng)中保存的文件同名。由此可知,若NVP內(nèi)容具有相同的SharedPreferences名稱(chēng),它們那么都會(huì)保存在同一個(gè)文件中。
代碼清單7-3 定義SharedPreferences的名稱(chēng)
public static final String PREFERENCE_NAME = "SETTING_Infos";
為了可以使用SharedPreferences,需要將訪問(wèn)模式和SharedPreferences名稱(chēng)作為參數(shù),傳遞到getSharedPreferences()方法中,方法返回一個(gè)SharedPreferences對(duì)象,代碼如代碼清單7-4所示。
代碼清單7-4 getSharedPreferences()方法,獲取SharedPreferences對(duì)象
SharedPreferences sharedPreferences = getSharedPreferences
(PREFERENCE_NAME, MODE);
在獲取到SharedPreferences對(duì)象后,則可以通過(guò)SharedPreferences.Editor類(lèi)對(duì)SharedPreferences進(jìn)行修改(如代碼清單7-5所示),后調(diào)用commit()方法保存修改內(nèi)容。
其中,SharedPreferences廣泛支持包括整型、布爾型、浮點(diǎn)型和長(zhǎng)型等在內(nèi)的各種基本數(shù)據(jù)類(lèi)型。
代碼清單7-5 SharedPreferences.Editor對(duì)SharedPreferences修改
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("NAME", "Tom");
editor. putFloat "HEIGHT",1.81f);
editor.commit();
以上講述了如何修改SharedPreferences的數(shù)據(jù),那么如何讀取其中的數(shù)據(jù)呢?對(duì)于一個(gè)已經(jīng)保存了的SharedPreferences,若是從其中讀取數(shù)據(jù),則首先調(diào)用getSharedPreferences()方法,并在方法的第1個(gè)參數(shù)中指明需要訪問(wèn)的SharedPreferences名稱(chēng),獲取到SharedPreferences對(duì)象之后,先通過(guò)get()方法獲取保存在SharedPreferences中的NVP,get<Type
>()方法的第1個(gè)參數(shù)是NVP的名稱(chēng),第2個(gè)參數(shù)是在無(wú)法獲取到數(shù)值的時(shí)候使用的默認(rèn)值。代碼如代碼清單7-6所示。
代碼清單7-6 SharedPreferences.Editor對(duì)SharedPreferences修改
SharedPreferences sharedPreferences = getSharedPreferences
(PREFERENCE_NAME, MODE);
String name = sharedPreferences.getString(“NAME”,””);
String height = sharedPreferences. getString (“HEIGHT”, “”);