在重新启动应用程序后从SharedPreferences恢复时,设置丢失数据

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

这就是我存储它的方式:

Set 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 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 newSet = new HashSet(); 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(prefsDisagree.getStringSet(getContext().getString(R.string.pref_disagree_key), emptySet)); for (String item: disagree_set){ //stuff done here } } 

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

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

它实际上是记录的: getStringSet

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

 Set s = new HashSet