未在服务中获取共享首选项的更新值

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_valueMode 【参考方案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"

来自服务。希望它会起作用。

【讨论】:

以上是关于未在服务中获取共享首选项的更新值的主要内容,如果未能解决你的问题,请参考以下文章

在共享首选项中获取文件大小

共享首选项值更改时视图不更新

更新 ADT 23 后,首选项中的 SDK 路径缺失 [重复]

如何保存和获取存储在共享首选项中的包名称?

Svelte 绑定选择值未在获取时更新

在每个活动中使用共享首选项