android - 提交到 SharedPreferences 变量
问题描述
我试图了解何时实际提交了添加到 SharedPreferences 的值。执行以下代码后,变量 valCount 的初始值设置为 0,然后将 valCount+1 加到 1。同时,log.e 方法最初返回 0(在 valCount+1 代码之后执行)。只有在第二次调用此代码时,变量 valCount 的值才会在调用 log.e 方法时显示为值为 1。
SharedPreferences.Editor editor = sharedPreferences.edit();
valCount = sharedPreferences.getInt("valCount", 0);
editor.putInt("valCount", valCount+1);
editor.apply();
Log.e("valCount", valCount+"");
解决方案
来自Androidapply
文档:
与将其首选项同步写入持久存储的 commit() 不同,apply() 立即将其更改提交到内存中的 SharedPreferences 但开始异步提交到磁盘,并且您不会收到任何失败的通知。
因此,当apply()
您异步保存数据时,您不会立即在磁盘上看到这些更改。如果您想同步保存它,您应该使用commit
.
顺便说一句,要查看差异,您应该调用sharedPreferences.getInt("valCount", 0)
您的Log
而不是valCount
. 仍然从(您的第二行)valCount
的第一次调用中引用该对象。sharedPreferences.getInt("valCount", 0)
推荐阅读
- android - 图库应用程序如何在 Watch 上运行?
- sendinblue - 自定义 sendinblue 聊天定位
- postgresql - 在 Postgres 中添加 INNER JOIN 子句时 SQL 性能下降
- reactjs - 在新选项卡中下载文件时赛普拉斯退出
- javascript - 如何在 Leaflet.js 中添加条形图标记?
- electron - 加载窗口后无法对电子应用程序执行任何操作
- python - 如何将我的输入输入到 python 中的文本文件中?
- javascript - 使用没有 ID 的内联 CSS 悬停时的工具提示
- opengl - 避免在 Android 上使用 GLSurfaceView 在设备旋转时重新加载纹理
- mysql - 将 4 个表连接到 1 个表