android-Sharedpreference的多个实例为同一字段提供不同的值

android-Sharedpreference的多个实例为同一字段提供不同的值,第1张

概述我正在尝试使用两个不同的sharepreferences实例读取sharedpreference中的字段值.当使用第一个实例进行读取可提供正确的结果时,使用第二个实例进行的第二次读取 *** 作将返回默认值.为什么会这样?我在这里缺少一些重要的概念吗?码:publicvoidtestMethod(){SharedPreferences

我正在尝试使用两个不同的sharepreferences实例读取sharedpreference中的字段值.当使用第一个实例进行读取可提供正确的结果时,使用第二个实例进行的第二次读取 *** 作将返回默认值.为什么会这样?我在这里缺少一些重要的概念吗?

码:

  public voID testMethod(){    SharedPreferences pref1=myContext.getSharedPreferences(PreferenceHelper.MY_PREF, myContext.MODE_PRIVATE);    //Correct value is obtained here...    String value1=pref1.getString("KEY", "");    SharedPreferences pref2=myContext.getSharedPreferences(PreferenceHelper.MY_PREF, myContext.MODE_PRIVATE);    //Incorrect value is obtained here...    String value2=pref2.getString("KEY", "");}

我怀疑这是由于多个具有相同首选项的实例引起的.AndroID文档指出:

 Only one instance of the SharedPreferences object is returned to any callers for the same name, meaning they will see each other's edits as soon as they are made.

我的情况与这句话中的概念有关吗?

解决方法:

由于您调用的是commit()而不是apply(),因此其中之一无法保存,您将得到错误的答案.查看文档:

与commit()将其首选项同步写到持久性存储中的方式不同,apply()立即将其更改提交到内存中的SharedPreferences,但是将异步提交到磁盘,并且不会收到任何故障通知.如果此SharedPreferences上的另一个编辑器在apply()仍未完成的情况下执行常规commit(),则commit()将阻塞,直到所有异步提交以及提交本身都完成为止.

从http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()以上

总结

以上是内存溢出为你收集整理的android-Sharedpreference的多个实例为同一字段提供不同的值全部内容,希望文章能够帮你解决android-Sharedpreference的多个实例为同一字段提供不同的值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1077915.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存