【问题标题】:Set<String> losing data when restored from SharedPreferences after app is restartedSet<String> 在应用程序重新启动后从 SharedPreferences 恢复时丢失数据
【发布时间】:2016-02-02 17:22:39
【问题描述】:

我在 android 上使用 SharedPreference 来存储一组字符串。据我所知,它可以很好地存储和检索,但是重新启动应用程序时会丢失一些数据。字符串是一一添加的,在添加它们之前,我检索集合,添加一个字符串,然后再次存储它。

这是我存储它的方式:

Set<String> emptySet = null;
            SharedPreferences prefs = getContext().getSharedPreferences(getContext().getString(R.string.pref_disagree_key), Activity.MODE_PRIVATE);

            String newIdAgreed = getItem(position).getId();

            if (prefs.contains(getContext().getString(R.string.pref_disagree_key))) {

                Set<String> updateSet = prefs.getStringSet(getContext().getString(R.string.pref_disagree_key), emptySet);
                updateSet.add(newIdAgreed);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putStringSet(getContext().getString(R.string.pref_disagree_key), updateSet);
                editor.commit();

            } else {
                Set<String> newSet = new HashSet<String>();
                newSet.add(newIdAgreed);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putStringSet(getContext().getString(R.string.pref_disagree_key), newSet);
                editor.commit();
            }

这就是我找回它的方式:

if (prefsDisagree.contains(getContext().getString(R.string.pref_disagree_key))){
        disagree_set = new HashSet<String>(prefsDisagree.getStringSet(getContext().getString(R.string.pref_disagree_key), emptySet));
        for (String item: disagree_set){
            //stuff done here


        }
}

我看到了一些关于这个主题的类似问题,但没有一个答案能解决我的问题。有什么想法吗?

【问题讨论】:

    标签: java android set sharedpreferences


    【解决方案1】:

    当您在保存后尝试再次对其进行编辑时,StringSet 不是持久的,因此当您退出应用程序并再次打开它时,刚刚添加的新数据不会被保存。

    实际记录在案:getStringSet

    您需要先复制StringSet,然后将数据插入/添加到复制的StringSet

    Set<String> s = new HashSet<String(prefs.getStringSet(
                   getContext().getString(R.string.pref_disagree_key), 
                   emptySet));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多