微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android SharedPreferences更新无效

我知道,这个问题已经在许多线程中得到了解决,但我无法弄清楚这一点.
所以我设置了一个像这样的共享首选项:
SharedPreferences prefs = MainActivity.this.getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putStringSet(spinnerName,myValueSet  );
editor.apply();

我读了这样的偏好:

SharedPreferences prefs = MainActivity.this.getPreferences(MODE_PRIVATE);
Set<String> spinnerValuesSet = null;
spinnerValuesSet = prefs.getStringSet(spinnerName,null );

一切正常,除了我的更改在此活动运行时可见,即 – 我显示SharedPreferences中的值,允许用户删除添加然后更新ListView.这有效,但在我重新启动应用程序后,我得到了初始值.
例如,我的方法是从列表中删除一个值,更新SharedPreferences中的值并更新ListView

Button btn = (Button) findViewById(R.id.button1);
btn.setonClickListener(new OnClickListener(){
   @Override
   public void onClick(View arg0) {
    SharedPreferences prefs =  MainActivity.this.getPreferences(MODE_PRIVATE);
    Set<String> spinnerValuesSet = prefs.getStringSet(spinnerName,null );
    for (String s : spinnerValuesSet)
    {
         if(s == currentSelectedItemString)
         {
             spinnerValuesSet.remove(s);
             SharedPreferences.Editor editor = prefs.edit();
             editor.putStringSet(spinnerName,spinnerValuesSet );
                 editor.apply();
             break;
         }
    }
 updateListValues();

}
});

这是更新ListView的方法

private void updateListValues()
 {
   SharedPreferences prefs = MainActivity.this.getPreferences(MODE_PRIVATE);
   Set<String> spinnerValuesSet = prefs.getStringSet(spinnerName,null );
   if(spinnerValuesSet.size() > 0) 
    {
        names = new ArrayList<String>();
        names.clear();
        int k=0;
        for (String s : spinnerValuesSet) {
             names.add(k,s);
             k++;
        }
        namesAA = new ArrayAdapter<String> (  this,android.R.layout.simple_list_item_activated_1,names );
        myList.setAdapter(namesAA);
   }

}

任何帮助深表感谢.

解决方法

SharedPreferences的各种get方法返回的对象应该被视为不可变的.请参阅 SharedPreferences Class Overview以供参考.

您必须通过SharedPreferences.edit()返回的SharedPreferences.Editor调用remove(String),而不是直接调用SharedPreferences.getStringSet返回的Set(String,Set< String>).

每次需要构建一个包含更新内容的新字符串集,因为当您想要更新其内容时,必须从SharedPreferences中删除Set条目.

原文地址:https://www.jb51.cc/android/310357.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐