編寫:kesenhoo - 原文:http://developer.android.com/training/basics/data-storage/shared-preferences.html
當有一個相對較小的key-value集合需要保存時,可以使用SharedPreferences APIs。 SharedPreferences 對象指向一個保存key-value pairs的文件,併為讀寫他們提供了簡單的方法。每個 SharedPreferences 文件均由framework管理,其既可以是私有的,也可以是共享的。 這節課會演示如何使用 SharedPreferences APIs 來存儲與檢索簡單的數據。
Note: SharedPreferences APIs 僅僅提供了讀寫key-value對的功能,請不要與Preference APIs相混淆。後者可以幫助我們建立一個設置用戶配置的頁面(儘管它實際上是使用SharedPreferences 來實現保存用戶配置的)。更多關於Preference APIs的信息,請參考Settings 指南。
我們可以通過以下兩種方法之一創建或者訪問shared preference 文件:
例:下面的示例在一個 Fragment 中被執行,它以private模式訪問名為 R.string.preference_file_key
的shared preference文件。這種情況下,該文件僅能被我們的app訪問。
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE);
應以與app相關的方式為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均可通過文件名訪問該文件。
為了寫shared preferences
文件,需要通過執行edit()創建一個 SharedPreferences.Editor。
通過類似putInt()與putString()等方法傳遞keys與values,接著通過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 preference中讀取數據,可以通過類似於 getInt() 及 getString()等方法來讀取。在那些方法裡面傳遞我們想要獲取的value對應的key,並提供一個默認的value作為查找的key不存在時函數的返回值。如下:
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), default);