如果有一些小數據的鍵值對需要保存,可以用SharedPreferences
這個類裏面的API。SharedPreferences 對象指向一個包含鍵值對的文件,並且提供了一些讀取和寫入鍵值對的方法。SharedPreferences 是被framework層管理的,可以是私有的,也可以被共享。
注意:SharePreferences 僅僅是操作鍵值對,不可以和
Preference
混淆,Preference會創建一個設置界面,儘管它裏面還是用
SharePreferences
來保存信息。想了解更多請閱讀:Preference 和Settings。
SharedPreferences處理
你可以創建一個新 的SharePreferences 文件或者是獲取一個已經存在,我們可以使用下面的方法:
getSharedPreferences()
利用這個方法可以通過名稱來獲取到一個可以共享的preference 文件,名稱在第一個參數裏面指定,可以用你的activity裏面的任何一個Contextd對象
來獲取它。
getPreferences() 這個方法獲取的到時針對這個activity的共享preference 文件。因爲這個文件僅僅是針對這個activity的,所有不需要提供一個名稱。
比方說,下面的這個代碼是在一個
Fragment裏面執行的,獲取了一個由字符串資源裏面的R.string.preference_file_key命名的preference 文件,設置wie私有模式,這樣這個文件就僅僅可以被你的APP訪問。
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE);
當命名共享的preference文件的時候,你需要使用一個在你的APP裏面唯一的字符串標示,就像"com.example.myapp.PREFERENCE_FILE_KEY"
另外,如果僅僅是針對一個activity需要共享的preference文件的時候,可以使用getPreferences()方法。
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
警告:如果創建shared preferences文件的時候使用了MODE_WORLD_READABLE
or
MODE_WORLD_WRITEABLE屬性,任何其他的app如果知道你的這個文件的名稱,都可以訪問你的數據。
寫數據到
Shared Preferences
要往shared preferences裏面寫數據,需要調用SharedPreferences 的edit()獲取一個
SharedPreferences.Editor對象。
然後用這個Editor裏面的方法來寫入數據,列入
putInt()
和putString()。然後調用commit()保存寫入的結果。如下:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();
從Shared Preferences裏面讀取數據
從一個shared preferences裏面讀取數據,可以調用getInt()
和getString()這類方法,如果對應的鍵值對存在,會獲取到對應的鍵值對的值,否則,會返回一個默認數值。這個數值可以自己指定。
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);