天天看點

SharedPreferences 首選項淺析(一)

        在Android資料存儲方式中SharedPreferences是比較簡單的一種檔案存儲。一般用于應用的配置資訊的存儲。由于SharedPreferences用法比較簡單,廢話不多說,我們直接進入正題。

我們先看看SharedPreferences可以存儲的資料的類型:String,int,Double,Long,boolean,set集;

存儲資料

Set<String> set = new HashSet<String>();
		for (int i = 0; i < 3; i++) {
			set.add("set" + i);
		}
		//
		SharedPreferences share = this.getSharedPreferences("my_sharedpreferences", Context.MODE_PRIVATE);
		Editor editor = share.edit();
		editor.putBoolean("val_boolean", true);
		editor.putString("val_string", "小明");
		editor.putFloat("val_float", 11);
		editor.putInt("val_int", 12);
		editor.putLong("val_long", 13);
		editor.putStringSet("val_set", set);
		editor.apply();           

下面截圖就是我們在my_sharedpreferences.xml檔案中存儲的資料:

SharedPreferences 首選項淺析(一)

擷取資料:(其中第二個參數都是預設值)

SharedPreferences share = this.getSharedPreferences("my_sharedpreferences", Context.MODE_PRIVATE);
		share.getString("val_string", "");
		share.getBoolean("val_boolean", true);
		share.getFloat("val_float", 0);
		share.getInt("val_int", 0);
		share.getLong("val_long", 0);
		share.getStringSet("val_set", set);           

        上面分别存儲了SharedPreferences所能存儲的所有類型值,調用很簡單首先初始化SharedPreferences  并不是通過new一個對象,而是通過this.getSharedPreferences(name, mode)執行個體化(具體為什麼這麼執行個體化我會在接下來的文章結合源碼裡給大家解析)。這裡的this是目前Activity的上下文context,或者是自定義的Application的執行個體,這兩者是沒有差別的,因為他們最終會都會調用到Context類裡的抽象方法getSharedPreferences(String name, int mode)。這個方法裡需要兩個參數,第一個是我們想要儲存到檔案的檔案名。第二個是運作模式,官方給出四個參數(一般使用MODE_PRIVATE模式就足夠了):

        MODE_PRIVATE:檔案的預設編輯模式,值為0。在這個模式下存儲檔案隻能被目前應用通路,或者被别的應用擷取到目前應用Context的執行個體也可以通路。

        MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE:控制其他應用是否有權限來讀寫檔案,他們的值分别為1和2。(目前官方不推薦使用這兩種模式了,使用         MODE_MULTI_PROCESS可以代替。)

        MODE_MULTI_PROCESS:允許其他的程序通路檔案,值為4,

注意:

       1、除了這四種模式有的還有使用MODE_APPEND這種模式的(值為32768),這種模式會使你寫入的内容追加在原來的資料後面,而MODE_PRIVATE模式會覆寫原來的内容。

       2、無論在哪種模式,都會先判斷你傳入的檔案名稱是否存在假如不存在則會建立檔案。

這裡擷取Editor對象來操作資料,主要是對資料增、删、改。添加資料和修改資料上面已經給出。

删除其中特定一條資料

SharedPreferences share = this.getSharedPreferences("my_sharedpreferences", Context.MODE_PRIVATE);
Editor editor = share.edit();
editor.remove("val_string");
editor.apply();           

清空檔案裡的所有資料

SharedPreferences share = this.getSharedPreferences("my_sharedpreferences", Context.MODE_PRIVATE);
Editor editor = share.edit();
editor.clear();
editor.apply();           

資料送出

        Editor有兩種資料送出方式第一種是commit(),第二種是apply()方法。這兩種方法有本質的差別:首先第一個commit()送出後有一個boolean傳回值,這個傳回值表明資料是否送出成功,而apply()沒有傳回值。第二個差別是apply()送出資料後首先會送出到記憶體中而後異步送出到磁盤中,commit()送出資料時是記憶體和磁盤同步送出。

建立Sharedpreferences檔案

        建立檔案很簡單,隻要調用getSharedpreferences(String name, int mode);方法假如你傳入的檔案名不存在則會用傳入的名稱建立一個檔案,這裡注意的是在Activity中也可以使用this.getPreferences(mode);擷取SharedPreferences 執行個體,但是用這個方法操作的檔案是以目前類名為名稱的檔案(在Application中不能調用這個方法)。

檔案Sharedpreferences的位置

        這個檔案是和我們應用安裝的位置綁定的,一般都放在系統檔案根目錄下:/data/data/應用包名/shared_prefs/檔案名.xml。例如我的應用包名是com.android.android.sharedpreferences_1;我存儲的SharedPreferences檔案名是my_sharedpreferences 那麼問的檔案路徑就是/data/data/com.android.android.sharedpreferences_1/shared_prefs/my_sharedpreferences.xml。這裡我們的應用其實就是安裝在/data/data檔案夾下的。另外想要讀取到這個檔案你的手機必須擁有超級管理者權限也就是我們所說的root權限。

        好了,Sharedpreferences基本使用就這些也不是很複雜,下一篇我們将從源碼的角度進一步解析。