未在服务中获取共享首选项的更新值
Posted
技术标签:
【中文标题】未在服务中获取共享首选项的更新值【英文标题】:Not getting the updated value of the shared preference in the service 【发布时间】:2012-08-21 15:04:21 【问题描述】:我正在为从小部件启动的活动中的共享首选项存储一些值。如果我从同一个小部件启动的服务中检索该值,则它不是更新的。我得到了共享偏好中的先前值。即使我在共享首选项 xml 中检查了该值,我也在那里看到了更新的值。 为什么会这样。我知道widget和activity是两个进程,是这个原因吗?
SharedPreferences preferences = getSharedPreferences("preferences_target_value", Context.MODE_PRIVATE);
String targetValue = preferences.getString("preferences_target_value", "0");
System.out.println("targetValue "+targetValue);`
【问题讨论】:
您是如何从服务中检索到的?贴出相关代码? 编辑了问题。请看一下 您在Activity中设置值时是否使用了相同的名称preferences_target_value
和Mode
?
【参考方案1】:
这些值按进程缓存。
如果您在 android > 2.3 上运行,则在调用 getSharedPreferences ()
时必须指定 MODE_MULTI_PROCESS
。如果您在 Android
【讨论】:
当您访问共享首选项时,您拨打getSharedPreferences(String name, int mode);
。只需指定MODE_MULTI_PROCESS
作为第二个参数。
MODE_MULTI_PROCESS 不起作用,现在已弃用【参考方案2】:
在更新值后使用commit()
,调用它以在编辑器中执行任何更改
prefsEditor.commit();
改变你的代码而不是这个
SharedPreferences preferences = getSharedPreferences("preferences_target_value", Context.MODE_PRIVATE);
到这里
SharedPreferences preferences = getSharedPreferences("preferance name", Context.MODE_PRIVATE);
【讨论】:
我承诺。如果我重新安装小部件,我会在服务中更新值。在共享首选项 xml 中,我可以使用新值。 我的偏好名称和值相同。而且检索不是问题,因为我在使用相同代码的活动中获得了正确的值【参考方案3】:在清单文件中尝试删除
android:process=":my_process"
来自服务。希望它会起作用。
【讨论】:
以上是关于未在服务中获取共享首选项的更新值的主要内容,如果未能解决你的问题,请参考以下文章