SharedReferences在Android 6及更高版本中不更新值

SharedReferences在Android 6及更高版本中不更新值,android,sharedpreferences,Android,Sharedpreferences,我正在SharedReferences中存储用户的个人资料图片uri。当用户更新他们的配置文件映像时,它也应该在SharedReferences中得到更新。然而,当我尝试检索新的图像uri时,我总是会得到旧的uri,但是如果我关闭设备或强制应用程序停止,该值就会更新。我注意到这个问题发生在android 6.0和8.0上,尝试kitkat后效果很好。我在互联网上找到了一些建议使用apply()而不是commit()的解决方案,但两者都不起作用 下面是我用来保存图像uri的代码: SharedPr

我正在SharedReferences中存储用户的个人资料图片uri。当用户更新他们的配置文件映像时,它也应该在SharedReferences中得到更新。然而,当我尝试检索新的图像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();
SharedPreferences login = PreferenceManager.getDefaultSharedPreferences(getContext());
SharedPreferences.Editor editor = login.edit();
String profileImageURI = login.getString( USER_PROFILE_PIC, "" );
下面是我检索图像uri的方法:

SharedPreferences login = PreferenceManager.getDefaultSharedPreferences(getContext());
SharedPreferences.Editor editor = login.edit();
editor.putString( USER_PROFILE_PIC,  selectedImage.toString());
editor.apply();
SharedPreferences login = PreferenceManager.getDefaultSharedPreferences(getContext());
SharedPreferences.Editor editor = login.edit();
String profileImageURI = login.getString( USER_PROFILE_PIC, "" );
更新


在更新SharedReferences的活动中正确返回该值。然而,在syncAdapter中,当我从SharePreferences中检索值时,它返回旧值。

最终得出结论,在Android<2.3中,一个进程可以进行更改,另一个进程可以读取更改。在
Android>2.3
之后,这仍然是可能的,但在使用
SharePreferences
时需要设置
MODE\u MULTI\u 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

我第一次找到的解决方案

查看editor.commit()是否返回true或false。它返回true@suyashchav您可以使用com.willowtreeapps.hyperion:hyperion共享首选项库检查SharedReferences中的值。查看是否将其更新为所需的值在从SharedReferences检索uri后是否尝试记录uri的值?是的,我尝试了,它显示了旧值@塔基丁