使用 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() 是同步的,因此应避免在主线程中调用它,因为它可能会暂停您的 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);