使用 SharedPreferences 保存简单数据

如果您有想要保存的相对较小键值对集合,则可以使用 SharedPreferences API。SharedPreferences 对象指向包含键值对的文件,并提供读写这些键值对的简单方法。每个 SharedPreferences 文件均由框架进行管理,可以是私有文件,也可以是共享文件。

本页介绍了如何使用 SharedPreferences API 存储和检索简单值。

获取共享偏好设置的句柄

您可以通过调用以下方法之一创建新的共享偏好设置文件或访问已有共享偏好设置文件:

  • getSharedPreferences() - 如果您需要多个由名称(使用第一个参数指定)标识的共享偏好设置文件,则使用此方法。您可以从您的应用中的任何 Context 调用此方法。
  • getPreferences() - 对于 activity,如果您只需使用一个共享偏好设置文件,请从 Activity 中使用此方法。由于这会检索属于该 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"

或者,如果您只需要 Activity 的一个共享偏好设置文件,则可以使用 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() 是同步的,您应避免从主线程调用它,因为它可能会暂停您的界面呈现。

从共享偏好设置中读取

如需从共享偏好设置文件中检索值,请调用 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);