如要儲存較少量的鍵/值集合,建議使用 SharedPreferences
API。SharedPreferences
物件會指向包含鍵/值組合的檔案,並提供讀取和寫入鍵/值組合的簡單方法。每個 SharedPreferences
檔案均由架構管理,可設定為不公開或共用。
本頁面說明如何使用 SharedPreferences
API 儲存及擷取簡易值。
取得共用偏好設定檔案
如要建立新的共用偏好設定檔案,或存取現有檔案,請呼叫以下其中一種方法:
getSharedPreferences()
:如果您需要多個由名稱辨識的共用偏好設定檔案,請使用此方法,並透過第一個參數指定名稱。您可以從應用程式中的任何Context
呼叫此方法。getPreferences()
:如果您只需要針對活動使用一個共用偏好設定檔案,請從Activity
使用此方法。此方法會擷取屬於活動的預設共用偏好設定檔案,您不必提供名稱。
舉例來說,以下程式碼會存取由來源字串 R.string.preference_file_key
辨識的共用偏好設定檔案,並使用私人模式開啟檔案,因此只有您的應用程式可以存取該檔案:
Kotlin
val sharedPref = activity?.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE)
Java
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE);
命名共用偏好設定檔時,建議使用可明確識別應用程式的名稱。如想這麼做,只要在檔名開頭加上應用程式 ID 即可。例如:"com.example.myapp.PREFERENCE_FILE_KEY"
此外,如果您的活動只需要一個共用偏好設定檔,可以使用 getPreferences()
方法:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
如果您是使用 SharedPreferences
API 儲存應用程式設定,建議改用 getDefaultSharedPreferences()
取得整個應用程式的預設共用偏好設定檔案。詳情請參閱「『設定』開發人員指南」。
寫入共用偏好設定檔案
如要寫入共用偏好設定檔案,請在 SharedPreferences
上呼叫 edit()
,建立 SharedPreferences.Editor
。
請透過 putInt()
和 putString()
等方法,傳遞您要寫入的鍵和值。接著呼叫 apply()
或 commit()
以儲存變更。例如:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_high_score_key), newHighScore) apply() }
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score_key), newHighScore); editor.apply();
apply()
會立即變更記憶體中的 SharedPreferences
物件,但不會將更新內容同步寫入磁碟。如想同步寫入磁碟,可以改用 commit()
。由於 commit()
為同步性質,建議您避免從主執行緒呼叫,以免 UI 算繪作業暫停。
從共用偏好設定檔案讀取資料
如要從共用偏好設定檔案擷取值,請呼叫 getInt()
和 getString()
這類方法,並為所需值提供鍵。如果鍵不存在,您可以選擇傳回預設值。例如:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key) val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key); int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);