SharedPreferences存储小量应用程序配置数据

SharedPreferences 是 Android 中用于存储小量应用程序配置数据的一种简单方式。SharedPreferences 是 Android 平台上用于轻量级数据存储的一种机制。它提供了简单的方法来保存和获取基本类型的数据,如 booleanfloatintlongstring

注意:SharedPreferences 不支持存储大量的数据,也不支持复杂的数据类型。如果你需要存储更大量的数据,或者需要存储复杂的数据类型,你可能需要考虑使用 SQLite 数据库或者文件存储。

适用场景:

  1. 应用程序配置信息存储: SharedPreferences 可以用来存储应用程序的配置信息,例如用户偏好设置、用户界面状态、应用程序首选项等。
  2. 用户登录状态管理: 你可以使用 SharedPreferences 存储用户登录状态(例如,记住我选项),以便在应用程序重新启动时保持用户的登录状态。
  3. 小量数据的本地存储: 如果你需要在应用程序中保存一些小量的数据,例如用户设置的首选项或临时数据,SharedPreferences 是一个方便的选择。

Android studio开发工具中查看SharedPreferences :

找到Device Explorer功能,图标是一部手机+放大镜,按照目录找下去:data/data/包名/shared_prefs/各种你自己所定义的文件名,打开里面就存有你想要的数据。

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <int name="score" value="100" />
    <boolean name="isLoggedIn" value="true" />
    <string name="username">John</string>
</map>

下载或打开时遇到报错:There were errors downloading files and/or directories: ‘secure_mkdirs failed: Operation not permitted’ error on device serial #emulator-5554 executing service ‘sync-send(’/data/local/tmp/device-explorer/.temp_cp_test_file.tmp’)'这个错误提示表明在设备模拟器(emulator-5554)上执行服务时,无法创建目录并下载文件。具体错误信息是"secure_mkdirs failed: Operation not permitted",意思是在创建目录时发生了权限不足的错误。

尝试解决方案:
使用命令行在platform-tools目录下输入完成下面操作,如果adb不存在就吧platform-tools目录添加到系统环境变量path中,完成下面的操作后,重启android studio应该就可以了。

D:\androidSDK\canary\platform-tools>adb shell
generic_x86_arm:/ $ su
generic_x86_arm:/ # chmod 777 /data
generic_x86_arm:/ # adb root
/system/bin/sh: adb: not found
127|generic_x86_arm:/ #

使用 SharedPreferences 的基本步骤:

  1. 获取 SharedPreferences 实例: 首先,获取一个 SharedPreferences 对象,通常使用 getSharedPreferences 方法,其中第一个参数是文件名,第二个参数是访问模式(通常使用 MODE_PRIVATE,若想知道还有哪些访问模式见下文)。
SharedPreferences sharedPreferences = getSharedPreferences("你所定义的文件名", MODE_PRIVATE);
  1. 写入数据: 使用 SharedPreferences 的编辑器(Editor)来写入数据。你可以使用 edit() 方法获取一个编辑器,然后使用不同的 putX() 方法(如 putString(), putInt(), putBoolean() 等)来存储数据。
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("username", "John");
editor.putInt("score", 100);
editor.putBoolean("isLoggedIn", true);
editor.apply(); // 提交更改
  1. 读取数据: 通过 SharedPreferences 实例可以轻松读取存储的数据。
String username = sharedPreferences.getString("username", "");
int score = sharedPreferences.getInt("score", 0);
boolean isLoggedIn = sharedPreferences.getBoolean("isLoggedIn", false);

注意事项:

  1. 不要滥用: SharedPreferences 适用于存储小量数据,不适合大量数据存储。对于大型数据集,应该使用其他存储机制,如数据库。

  2. 敏感数据存储: 不要将敏感信息(如密码或密钥)存储在 SharedPreferences 中,因为它们可以相对容易地被访问。对于敏感数据,应该使用安全的存储方式,例如 Android 的 EncryptedSharedPreferences。

  3. 异步提交: 使用 apply() 方法来异步提交更改,而不是使用 commit() 方法,以避免阻塞主线程。

  4. 清除数据: 使用 clear() 方法可以清除所有存储在 SharedPreferences 中的数据。

editor.clear().apply(); // 清除所有数据
  1. 考虑数据版本: 如果你的应用程序数据结构发生变化,要注意处理数据迁移和版本控制。

  2. 上下文管理: 获取 SharedPreferences 对象时,确保提供正确的上下文,以确保访问正确的 SharedPreferences 文件。

  3. 备份和恢复: 默认情况下,SharedPreferences 的数据不会自动备份到云端。如果需要备份和恢复数据,你需要实现自己的逻辑或使用 Auto Backup 功能。

总之,SharedPreferences 是一个轻量级的本地存储机制,适用于小量数据的持久化和配置管理。但要谨慎使用,避免存储敏感信息,并注意数据版本控制和备份恢复策略。

SharedPreferences 对象访问模式

访问模式常量访问权限值说明
MODE_PRIVATE0默认模式,只有当前应用程序可以访问该文件。
MODE_WORLD_READABLE(已弃用)1其他应用程序可以读取该文件的数据,不再建议使用。
MODE_WORLD_WRITEABLE(已弃用)2其他应用程序可以写入或修改该文件的数据,不再建议使用。
MODE_MULTI_PROCESS4即使应用程序在多个进程中运行,也可以访问该文件。
  1. MODE_PRIVATE (0): 这是默认的访问模式,表示只有当前应用程序可以访问该 SharedPreferences 文件。其他应用程序无法访问这些数据。
  2. MODE_WORLD_READABLE (1): 过时的访问模式,不再建议使用。表示所有应用程序都可以读取这个 SharedPreferences 文件中的数据。这种模式存在安全风险,因此不建议使用。
  3. MODE_WORLD_WRITEABLE (2): 过时的访问模式,不再建议使用。表示所有应用程序都可以写入或修改这个 SharedPreferences 文件中的数据。这种模式存在安全风险,因此不建议使用。
  4. MODE_MULTI_PROCESS (4): 表示多个进程可以同时访问同一个 SharedPreferences 文件。这在某些情况下可以用于确保多个进程之间能够正确地访问和更新共享的数据。

这些访问模式常常与 getSharedPreferences 方法一起使用,以确定 SharedPreferences 文件的访问权限。例如:

javaCopy code
SharedPreferences sharedPreferences = getSharedPreferences("my_preferences", MODE_PRIVATE);

在上面的示例中,使用 MODE_PRIVATE 访问模式创建了一个只允许当前应用程序访问的 SharedPreferences 文件。通常情况下,你会使用 MODE_PRIVATE,以确保只有你的应用程序可以访问这些数据。其他模式的使用已经不再推荐,因为它们可能引入安全问题。

解决小疑问:为什么访问权限值有0124而没有3呢?

**答:**在Android中,SharedPreferences的访问模式是用整数值来表示的,这些整数值是由位掩码(bitmask)组成的,每个位代表一种不同的访问权限。这些整数值通常是2的幂次方,因为它们可以在二进制表示中表示为只有一个位为1,其他位为0的形式。

  • MODE_PRIVATE 对应整数值 0,在二进制表示中只有第一个位是1,其他位都是0。
  • MODE_WORLD_READABLE 对应整数值 1,在二进制表示中只有第二个位是1,其他位都是0。
  • MODE_WORLD_WRITEABLE 对应整数值 2,在二进制表示中只有第三个位是1,其他位都是0。
  • MODE_MULTI_PROCESS 对应整数值 4,在二进制表示中只有第四个位是1,其他位都是0。

这种位掩码的设计允许你组合不同的访问权限,例如,如果你希望在MODE_PRIVATE的基础上启用MODE_MULTI_PROCESS,可以将它们的值相加,即 0 + 4 = 4,这表示既使用了MODE_PRIVATE,又启用了MODE_MULTI_PROCESS

所以,由于这种设计,虽然没有整数值为 3 的访问模式,但你可以通过组合其他模式来实现类似的效果,根据需要设置相应的位。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WiFiMing

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值