如果您有一组相对较小的键值对需要保存,您可以使用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);