【问题标题】: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

标签: android android-widget android-activity android-service


【解决方案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"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    相关资源
    最近更新 更多