设置<String> 应用重启后从 SharedPreferences 恢复时丢失数据
Set<String> losing data when restored from SharedPreferences after app is restarted
我在 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
}
}
我看到了一些关于此主题的类似问题,但 none 的答案解决了我的问题。有什么想法吗?
当您尝试在保存后再次编辑它时,StringSet 不是永久性的,因此当您退出应用程序并再次打开它时,刚刚添加的新数据不会被保存。
实际记录为:getStringSet
您需要先复制 StringSet
然后 insert/add 数据到复制的 StringSet
:
Set<String> s = new HashSet<String(prefs.getStringSet(
getContext().getString(R.string.pref_disagree_key),
emptySet));
我在 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
}
}
我看到了一些关于此主题的类似问题,但 none 的答案解决了我的问题。有什么想法吗?
当您尝试在保存后再次编辑它时,StringSet 不是永久性的,因此当您退出应用程序并再次打开它时,刚刚添加的新数据不会被保存。
实际记录为:getStringSet
您需要先复制 StringSet
然后 insert/add 数据到复制的 StringSet
:
Set<String> s = new HashSet<String(prefs.getStringSet(
getContext().getString(R.string.pref_disagree_key),
emptySet));