【问题标题】:SharedPreferences not updating value in Android 6 and aboveSharedPreferences 不更新 Android 6 及更高版本中的值
【发布时间】:2020-02-09 15:45:40
【问题描述】:

我将用户的个人资料图片 uri 存储在 SharedPreferences 中。当用户更新他们的个人资料图像时,它也应该在 SharedPreferences 中得到更新。但是,当我尝试检索新的图像 uri 时,我总是得到旧的 uri,但如果我关闭设备或强制应用程序停止,则值会更新。我注意到这个问题发生在 android 6.0 和 8.0 上,尝试过 kitkat 并且工作正常。我在互联网上找到了一些建议使用 apply() 而不是 commit() 的解决方案,但都没有奏效。

这是我用来保存图像 uri 的代码:

SharedPreferences login = PreferenceManager.getDefaultSharedPreferences(getContext());
SharedPreferences.Editor editor = login.edit();
editor.putString( USER_PROFILE_PIC,  selectedImage.toString());
editor.apply();

这是我检索图像 uri 的方法:

SharedPreferences login = PreferenceManager.getDefaultSharedPreferences(getContext());
SharedPreferences.Editor editor = login.edit();
String profileImageURI = login.getString( USER_PROFILE_PIC, "" );

更新

值在我更新 SharedPreferences 的活动中正确返回。但是,在 syncAdapter 中,当我从 SharePreferences 中检索值时,它会返回旧值。

【问题讨论】:

  • 查看 editor.commit() 返回 true 还是 false。
  • 它返回了真实的@SuyashChavan
  • 您可以使用 com.willowtreeapps.hyperion:hyperion-shared-preferences 库检查 SharedPreferences 中的值。看看它是否更新到所需的值
  • 您是否尝试在从 sharedpreferences 检索 uri 后记录它的值?
  • 是的,我做到了,它显示旧值。 @takieddine

标签: android sharedpreferences


【解决方案1】:

终于弄明白了,根据this answer,在Android < 2.3中,一个进程可以进行更改,另一个可以读取更改。在Android > 2.3之后还是可以的,但是在使用SharePreferences的时候需要设置MODE_MULTI_PROCESS,所以代码变成了这样:

SharedPreferences prefs = context.getSharedPreferences(context.getPackageName() + "_preferences", Context.MODE_PRIVATE| Context.MODE_MULTI_PROCESS); // context.getPackageName() + "_preferences" is the name of the sharePreferences file

我第一次找到解决方案in this blog

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 2018-03-04
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多