必威电竞|足球世界杯竞猜平台

SharedPreferences
來(lái)源:互聯(lián)網(wǎng)

SharedPreferences是Android平臺(tái)上的一個(gè)輕量級(jí)存儲(chǔ)類,主要用于保存應(yīng)用的常用配置,如Activity狀態(tài)。它類似于Windows系統(tǒng)上的ini配置文件,但擁有多種權(quán)限,可以全局共享訪問(wèn)。SharedPreferences提供了Long、Int、String等常規(guī)的Java數(shù)據(jù)類型的保存接口。其數(shù)據(jù)最終以XML方式保存,整體效率可能不如SQLite高,但對(duì)于輕量級(jí)的存儲(chǔ)來(lái)說(shuō),相對(duì)而言要好不少。XML解析由Dalvik通過(guò)自帶的XML Parser完成,如XMLpull方式,對(duì)內(nèi)存資源的占用相對(duì)較小。

操作模式

SharedPreferences數(shù)據(jù)的四種操作模式

??Context.MODE_PRIVATE

??Context.MODE_APPEND

??Context.MODE_WORLD_READABLE

??Context.MODE_WORLD_WRITEABLE

Context.MODE_PRIVATE:為默認(rèn)操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問(wèn),在該模式下,寫入的內(nèi)容會(huì)覆蓋原文件的內(nèi)容

Context.MODE_APPEND:模式會(huì)檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件.

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來(lái)控制其他應(yīng)用是否有權(quán)限讀寫該文件.

MODE_WORLD_READABLE:表示當(dāng)前文件可以被其他應(yīng)用讀取.

MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫入

特別注意:出于安全性的考慮,MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 在Android 4.2版本中已經(jīng)被棄用

用法

SharedPreferences 可以用來(lái)進(jìn)行數(shù)據(jù)的共享,包括應(yīng)用程序之間,或者同一個(gè)應(yīng)用程序中的不同組件。比如兩個(gè)activity除了通過(guò)Intent傳遞數(shù)據(jù)之外,也可以通過(guò)SharedPreferences來(lái)共享數(shù)據(jù)。

Editor sharedata = getSharedPreferences("data", 0).edit();

sharedata.putString("item","hello getSharedPreferences");

share控制資料公司commit();

SharedPreferences sharedata = getSharedPreferences("data", 0);

String data = sharedata.getString("item", null);

Log.v("cola","data="+data);

數(shù)據(jù)存取

通過(guò)SharedPreferences可以保存程序的某些配置信息,而程序員不需要知道它到底以什么形式保存的,保存在了什么地方。

Android系統(tǒng)中,SharedPreferences中的信息以XML文件的形式保存在 /data/data/PACKAGE_NAME/shared_prefs目錄下。

數(shù)據(jù)讀取

Java代碼

String PREFS_NAME = "Note.sample.roiding.com";

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

boolean silent = settings.getBoolean("silentMode", false);

String hello = settings.getString("hello", "Hi");

String PREFS_NAME = "Note.sample.roiding.com";SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);boolean silent = settings.getBoolean("silentMode", false);String hello = settings.getString("hello", "Hi");

這段代碼中:SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

通過(guò)名稱,得到一個(gè)SharedPreferences,顧名思義,這個(gè)Preferences是共享的,共享的范圍據(jù)現(xiàn)在同一個(gè)Package中,這里面說(shuō)所的Package和Java里面的那個(gè)Package不同,貌似這里面的Package是指在AndroidManifest.XML文件中:

XML代碼

package="com.roiding.sample.note"

android:versionCode="1"

Android:versionName="1.0.0">

這里面的package。后面的那個(gè)int是用來(lái)聲明讀寫模式,先不管那么多了,暫時(shí)就知道設(shè)為0(android.content.Context.MODE_PRIVATE)就可以了。

boolean silent = settings.getBoolean(”silentMode”, false);

獲得一個(gè)boolean值,這里就會(huì)看到用Preferences的好處了:可以提供一個(gè)缺省值。也就是說(shuō)如果Preference中不存在這個(gè)值的話,那么就用后面的值作為返回值,這樣就省去了我們的if什么什么為空的判斷。

數(shù)據(jù)寫入

Java代碼

String PREFS_NAME = "Note.sample.roiding.com";

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

SharedPreferences.Editor editor = settings.edit();

editor.putBoolean("silentMode", true);

editor.putString("hello", "Hello~");

editor.commit();

String PREFS_NAME = "Note.sample.roiding.com";SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);SharedPreferences.Editor editor = settings.edit();editor.putBoolean("silentMode", true);editor.putString("hello", "Hello~");editor.commit();有了上面數(shù)據(jù)讀取的代碼,這里面的就容易理解了,只是別忘了最后的commit();

注意:

訪問(wèn)接口和優(yōu)先修改數(shù)據(jù),并由getSharedPreferences(String,int)返回?cái)?shù)據(jù),為了統(tǒng)一設(shè)置參數(shù),有一個(gè)單例類供所有的客戶端共享。修改參數(shù)必須通過(guò)一個(gè)SharedPreferences.Editor對(duì)象,在存儲(chǔ)他們時(shí),以確保參數(shù)值有統(tǒng)一的狀態(tài)和控制

目前此類不支持多線程

參考資料 >

生活家百科家居網(wǎng)