首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >共享首选项更新后的值未反映在服务中

共享首选项更新后的值未反映在服务中
EN

Stack Overflow用户
提问于 2016-12-30 12:24:07
回答 3查看 1.3K关注 0票数 2

我的应用程序正在应用程序启动时调用一个服务。

在这个应用程序中,我正在更新给定的键值对的值。

代码语言:javascript
运行
复制
SharedPreferences.Editor editor = getSharedPreferences(getString(R.string.shared_preferences_name), MODE_PRIVATE).edit();
    editor.putString("key",value);
    editor.apply();

我正试着从服务处拿来

代码语言:javascript
运行
复制
SharedPreferences preferences = getSharedPreferences(getString(R.string.shared_preferences_name), MODE_PRIVATE);
String key = preferences.getString("key",null);

但是服务总是显示旧的键值。也就是说,该值仅在应用程序启动或服务重新启动后才会反映出来。

如何在不重新启动服务或应用程序的情况下获取服务中的更新值?

如前所述,这里共享首选项不能跨多个进程工作。有其他选择吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-21 12:16:21

如前所述,这里

Note: This class does not support use across multiple processes.

所以它不会即时反映变化。

票数 0
EN

Stack Overflow用户

发布于 2016-12-30 12:30:25

您需要OnSharedPeferencesChangeListener来监听首选项的更新。它显示旧值的原因是因为它没有更新(代码行不被调用)。您需要触发事件来更新它。

代码语言:javascript
运行
复制
SharedPreferences prefs = 
PreferenceManager.getDefaultSharedPreferences(this);

prefs.registerOnSharedPreferenceChangeListener(
new SharedPreferences.OnSharedPreferenceChangeListener() {
    public void onSharedPreferenceChanged(
        SharedPreferences prefs, String key) {

        String key = prefs.getString("key",null);
    }
});`

编辑:您需要SharedPreferences.OnSharedPreferenceChangeListener对象的强引用。示例这里

票数 0
EN

Stack Overflow用户

发布于 2022-07-24 20:21:01

您必须添加

代码语言:javascript
运行
复制
@Override
public void onResume(){
super.onResume();

对于即时更新读取,提交();或apply ();在某些情况下可能不起作用,这种方法肯定会起作用。

下面的是我们的示例

代码语言:javascript
运行
复制
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wi_fi);}       
     @Override
     public void onResume(){
    super.onResume();
    SharedPreferences mPreferences = 
    PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = mPreferences.edit();

    String name = mPreferences.getString(getString(R.string.name), "");
    
    editTextAddress.setText(name);
    button1.setText(name);
}

如果我有任何怀疑

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41396222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档