1.主要內容
本小節介紹SharedPreference相關API的使用
- 擷取SharedPreference的Handle
- 寫Shared Preference
- 讀Shared Preference
2.視頻講解
http://www.eyeandroid.com/thread-11495-1-1.html
3.翻譯參考
Saving Key-Value Sets
如果你有一個相對較小的key-value集合需要儲存,你應該使用SharedPreferences APIs。 SharedPreferences 對象指向了一個儲存key-value pairs的檔案,並且它提供了簡單的方法來讀寫這個檔案。每一個 SharedPreferences 檔案都是由framework管理的並且可以是私人或者可分享的。
這節課會示範如何使用 SharedPreferences APIs 來儲存與檢索簡單的資料。
Note: SharedPreferences APIs 僅僅提供了讀寫key-value對的功能,請不要與 Preference APIs相混淆。後者可以協助你建立一個設定使用者配置的頁面(儘管它實際上是使用SharedPreferences 來實現儲存使用者配置的)。如果想瞭解更多關於Preference APIs的資訊,請參考Settings 指南。
Get a Handle to a SharedPreferences [擷取SharedPreference的Handle]
你可以通過下面兩個方法之一來建立或者訪問shared preference 檔案:
getSharedPreferences() — 如果你需要多個通過名稱參數來區分的shared preference檔案, 名稱可以通過第一個參數來指定。你可以在你的app裡面通過任何一個Context 來執行這個方法。
getPreferences() — 當你的activity僅僅需要一個shared preference檔案時。因為這個方法會檢索activitiy下的預設的shared preference檔案,並不需要提供檔案名稱。
例如:下面的樣本是在 Fragment 中被執行的,它會訪問名為 R.string.preference_file_key 的shared preference檔案,並使用private模式來開啟它,這樣的話,此時檔案就僅僅可以被你的app訪問了。
Context context = getActivity();SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE);
當命名你的shared preference檔案時,你應該像 "com.example.myapp.PREFERENCE_FILE_KEY" 這樣來命名。
當然,如果你的activity僅僅需要一個shared preference檔案時,你可以使用 getPreferences()方法:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Caution: 如果你建立了一個 MODE_WORLD_READABLE 或者 MODE_WORLD_WRITEABLE 模式的shared preference檔案,那麼任何其他的app只要知道檔案名稱,則可以訪問這個檔案。
Write to Shared Preferences [寫Shared Preference]
為了寫shared preferences檔案,需要通過執行 edit() 來建立一個 SharedPreferences.Editor。
通過類似 putInt() 與 putString()方法來傳遞keys與values。然後執行 commit() 來提交改變。[後來有建議除非是出於線程同步的需要,否則請使用apply()方法來替代commit(),因為後者有可能會卡到UI Thread.]
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);SharedPreferences.Editor editor = sharedPref.edit();editor.putInt(getString(R.string.saved_high_score), newHighScore);editor.commit();
Read from Shared Preferences [讀Shared Preference]
為了從shared preference中檢索讀取資料,可以通過類似 getInt() 與 getString()等方法來讀取。在那些方法裡面傳遞你想要擷取value對應的key,並且提供一個預設的value。如下:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);longdefault= getResources().getInteger(R.string.saved_high_score_default));long highScore = sharedPref.getInt(getString(R.string.saved_high_score),default);