
我正在尝试使用两个不同的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的多个实例为同一字段提供不同的值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)