使用 SharedPreferences 儲存簡單資料

如要儲存較少量的鍵/值集合,建議使用 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);