Android中使用SharedPreferences來進行簡單數據的持久化處理,從名字就能夠了解,其設計目的是爲了保存應用程序的一些偏好設置,如音量,主題等信息。其與iOS開發中的NSUserDefault十分相似,而且,他們的實質都是採用XML格式的文件來存儲數據。java
對數據的持久化操做都會分爲兩個部分,一部分爲存,另外一部分爲取。首先,開發者在Activity中使用以下方法能夠獲取獲取建立一個SharedPreferences實例:app
/* 這個方法須要傳入兩個參數,第一個參數爲文件名,第二個參數爲文件模式 */ SharedPreferences sharedPreferences = getSharedPreferences("MyPreference",MODE_PRIVATE);
在getSharedPreference()方法中第一個參數決定這個存儲文件的名字,在獲取SharedPreferences實例時,若是系統建立過這個文件,則會返回本地的原文件,若是沒有這個文件,則會進行建立。第二個參數決定這個文件的訪問權限,可選參數以下:異步
Activity.MODE_PRIVATE,//默認操做模式,表明該文件是私有數據,只能被應用自己訪問 Activity.MODE_WORLD_READABLE,//表示當前文件能夠被其餘應用讀取, Activity.MODE_WORLD_WRITEABLE,//表示當前文件能夠被其餘應用寫入;
有了SharedPreferences實例,在須要進行數據存儲時,須要獲取到SharedPreferences實例中的Editor對象,SharedPreferences類中有一個Editor的內部接口,其中提供了存儲數據的相關方法,示例代碼以下:ide
//獲取Editor對象 SharedPreferences.Editor editor = sharedPreferences.edit(); //進行字符串存儲 editor.putString("password","123456"); //提交存儲內容 editor.commit();
Editor採用鍵值對的存儲方式,能夠存儲的數據即經常使用方法以下:spa
public interface Editor { //進行字符串數據存儲 SharedPreferences.Editor putString(String var1, String var2); //進行字符Set存儲 SharedPreferences.Editor putStringSet(String var1, Set<String> var2); //進行Int值存儲 SharedPreferences.Editor putInt(String var1, int var2); //進行Long值存儲 SharedPreferences.Editor putLong(String var1, long var2); //進行Float值存儲 SharedPreferences.Editor putFloat(String var1, float var2); //進行布爾值存儲 SharedPreferences.Editor putBoolean(String var1, boolean var2); //刪除一個鍵 與其對應的值 SharedPreferences.Editor remove(String var1); //清空全部數據 SharedPreferences.Editor clear(); //提交存儲 boolean commit(); //提交存儲請求 void apply(); }
上面的方法中,有兩點須要注意,首先clear()方法是將全部的鍵的值清空,並無刪除鍵,而remove是刪除鍵和值。第二點,commit()方法和apply()方法都用於提交數據,不一樣的是,commit()方法會直接將數據同步到磁盤,返回值會告知開發者是否同步成功,而apply()方法只是將數據存儲在內存,以後異步進行存盤操做,沒有返回值,在開發中,若是要保證數據立馬存入磁盤,要使用commit()方法。設計
對存儲的數據進行讀取,能夠直接調用SharedPreferences實例的以下方法:code
public interface SharedPreferences { //獲取全部鍵值映射表 Map<String, ?> getAll(); //經過鍵獲取字符串值 第一個參數爲鍵 第二個參數爲此鍵不存在時使用的默認值 String getString(String var1, String var2); //經過鍵獲取字符串值集合 第一個參數爲鍵 第二個參數爲此鍵不存在時使用的默認值 Set<String> getStringSet(String var1, Set<String> var2); //經過鍵獲取整形值 第一個參數爲鍵 第二個參數爲此鍵不存在時使用的默認值 int getInt(String var1, int var2); //經過鍵獲取長整形值 第一個參數爲鍵 第二個參數爲此鍵不存在時使用的默認值 long getLong(String var1, long var2); //經過鍵獲取浮點值 第一個參數爲鍵 第二個參數爲此鍵不存在時使用的默認值 float getFloat(String var1, float var2); //經過鍵獲取布爾值 第一個參數爲鍵 第二個參數爲此鍵不存在時使用的默認值 boolean getBoolean(String var1, boolean var2); //檢查文件中是否包含某個鍵 boolean contains(String var1); //註冊監聽 void registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener var1); //取消註冊監聽 void unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener var1); public interface OnSharedPreferenceChangeListener { void onSharedPreferenceChanged(SharedPreferences var1, String var2); } }
註冊監聽方法能夠提供給開發者一個回調接口,當SharedPreferences中數據改變時,會通知給開發者進行邏輯處理,示例代碼以下:對象
//建立監聽者 final SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { //須要重寫這個方法 這個方法中會傳入發生變化的鍵s @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) { Log.d("**********",s); } }; //進行註冊 sharedPreferences.registerOnSharedPreferenceChangeListener(listener);
舒適提示:能夠在Android Device Monitor中查看建立的SharedPreferences文件,路徑爲data/data/APP包名/shared_prefs目錄下,能夠看到其爲XML文件,以下圖:接口
專一技術,熱愛生活,交流技術,也作朋友。內存
——琿少 QQ羣:435043639