使用 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);