当应用程序重新启动后,通过SharedPreferences恢复时,Set<String>数据丢失。

6
我将使用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


        }
}

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

1个回答

7
StringSet在保存后再次编辑时不是持久化的,因此当您退出应用程序并重新打开时,新添加的数据将无法保存。
这实际上已经有文档说明了:getStringSet 您需要先复制StringSet,然后将数据插入/添加到复制的StringSet中:
Set<String> s = new HashSet<String(prefs.getStringSet(
               getContext().getString(R.string.pref_disagree_key), 
               emptySet));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接