【问题标题】:SharedPreferences: Why is my value not overwritten?SharedPreferences:为什么我的值没有被覆盖?
【发布时间】:2020-05-12 06:16:25
【问题描述】:

我正在尝试覆盖 SharedPreferences 中的一个值。这是一个布尔值,但不知何故它似乎有问题,或者我做错了什么。看看这个小代码sn-p:

sharedPref.edit().remove("bool1");
sharedPref.edit().putBoolean("bool1", true);
sharedPref.edit().commit();
Log.v("TEST" ,"" + sharedPref.getBoolean("bool1", true));

输出将是:

2020-01-26 19:37:48.244 29886-29886/de.rich.richquotes.richquotes V/TEST: false

我无法在互联网上找到答案。有人知道吗?

【问题讨论】:

  • 在删除之后也提交......?

标签: java android boolean sharedpreferences


【解决方案1】:

每次调用sharedPref.edit() 时,它都会创建一个新的SharedPreferences.Editor 对象,该对象具有自己的键值对映射,然后您可以通过commit()apply() 来持久化它们。当您再次调用edit() 时,它将创建一个新对象,该对象不会包含您之前对它所做的编辑。相反,你可以做这样的事情(所有这些方法都返回自己,所以你可以链接它们)

sharedPref.edit().putBoolean("bool1", true).commit();

另外,如果你不关心提交是否成功,你应该改用apply()。它是异步的,但也会立即在内存中进行更改,因此您不会注意到任何差异。

【讨论】:

  • 感谢您的回答!那么使用apply更好吗?
  • 是的,apply() 异步写入磁盘,因此它不会像commit() 那样在写入磁盘时阻塞您的线程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 2011-09-22
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多