作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的应用程序中,登录后我将用户详细信息(如用户名、ID、电子邮件等)保存在 sharedPreference 文件中,以便我可以在我的应用程序中的任何位置访问这些信息,我是这样做的
public void put(String fileName, String key, String value)
{
SharedPreferences sharedPref = getContext().getSharedPreferences(fileName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(key, value);
editor.commit();
}
现在我生成了一个不同的线程,它将独立运行(类似于 Sync),我正在像这样访问 sharedPreference,
mContext.getSharedPreferences(fileName, Context.MODE_PRIVATE);
但是这个特定首选项中的所有值都返回为 null,我做错了什么吗,
PS :- 如果我终止应用程序并再次生成相同的线程,我可以访问这些值(这很奇怪,但这种情况正在发生,即当用户第一次登录时,无法访问这些详细信息)
感觉像是与 SharedPreferences 的同步问题,有人可以帮忙吗?
最佳答案
我认为您选择了正确的方式。实际上访问共享首选项只是对存储在 /data/data/pkg_name/preferences
中的 XML 文件的 I/O 操作。因此,如果您想在 UI 以外的其他线程中访问它,这真的很有意义。
但是,您应该确保在对共享首选项进行每次操作后,您应该提交底层的更改。首先你应该提防differences between apply()
and commit()
.
因此,您应该首先提交您的更改,然后您可以通过另一个线程访问它。
关于java - 无法在不同线程中访问 SharedPreference 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33302664/
我是一名优秀的程序员,十分优秀!