Android NDK开发详解应用数据和文件之使用 SharedPreferences 保存简单数据

Android NDK开发详解应用数据和文件之使用 SharedPreferences 保存简单数据


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

本页介绍了如何使用 SharedPreferences API 存储和检索简单值。
注意:DataStore 是一种现代数据存储解决方案,应代替 SharedPreferences。它基于 Kotlin 协程和 Flow 构建,并克服了 SharedPreferences 的许多缺点。

如需了解详情,请参阅 DataStore 指南。
注意:SharedPreferences API 用于读写键值对,所以您不应将它们与 Preference API 混淆,后者可帮助您构建用于显示应用设置的界面(虽然它们也使用 SharedPreferences 保存用户设置)。如需了解 Preference 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);

注意:自 API 级别 17 起,MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 模式已被废弃。

从 Android 7.0(API 级别 24)开始,如果您使用这些模式,Android 会抛出 SecurityException。如果您的应用需要与其他应用共享私有文件,可以通过 FLAG_GRANT_READ_URI_PERMISSION 使用 FileProvider。如需了解详情,另请参阅共享文件。

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

本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。

最后更新时间 (UTC):2023-10-18。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值