首页 > 解决方案 > 提交到 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+"");

标签: android

解决方案


来自Androidapply文档:

与将其首选项同步写入持久存储的 commit() 不同,apply() 立即将其更改提交到内存中的 SharedPreferences 但开始异步提交到磁盘,并且您不会收到任何失败的通知。

因此,当apply()您异步保存数据时,您不会立即在磁盘上看到这些更改。如果您想同步保存它,您应该使用commit.

顺便说一句,要查看差异,您应该调用sharedPreferences.getInt("valCount", 0)您的Log而不是valCount. 仍然从(您的第二行)valCount的第一次调用中引用该对象。sharedPreferences.getInt("valCount", 0)


推荐阅读