【发布时间】:2018-01-10 18:38:21
【问题描述】:
我试图为我的 android 应用程序编写一个简单的方法。此方法应找到未包含在 HashSet 中的整数 [0-49]。之后应该使用 putStringSet() 方法将 HashSet 保存在 sharedPrefs 中。下面我提供我写的代码。
HashSet aHashSet;
SharedPreferences sharedPreferences;
int id;
sharedPreferences = getSharedPreferences("prefs", MODE_PRIVATE);
aHashSet = (HashSet) sharedPreferences.getStringSet("aHashSet", null);
if (aHashSet == null)
aHashSet = new HashSet();
for (id = 0; id < 50; ++id) {
if (aHashSet.contains(id))
continue;
else {
aHashSet.add(id);
break;
}
}
Log.d("myClassName", String.valueOf(sharedPreferences.edit().putStringSet("aHashSet", aHashSet).commit()));
return id;
每次我向集合中添加一些内容并将其保存在 shredPrefs 中时,我都会检查日志,我会得到一个真正的(作为成功的)提交。虽然这在应用程序运行时运行良好,但在应用程序关闭后 HashSet 未正确保存,并且起始编号始终为 0。
所以我尝试调试这个,我想我会使用一个字符串,我会将数字附加到它然后保存它,以检查问题是否是我无法正确保存哈希集,所以我如下添加此逻辑。
HashSet<String> aHashSet;
int id;
aHashSet = (HashSet) sharedPreferences.getStringSet("aHashSet", null);
String checkingString = sharedPreferences.getString("cs","");
if (aHashSet == null)
aHashSet = new HashSet();
for (id=0;id<50;++id){
if(aHashSet.contains(String.valueOf(id)))
continue;
else{
aHashSet.add(String.valueOf(id));
break;
}
}
checkingString+= id;
Log.d("myClassName",String.valueOf(sharedPreferences.edit().putStringSet("aHashSet",aHashSet).commit()));
Toast.makeText(this, checkingString, Toast.LENGTH_SHORT).show();
sharedPreferences.edit().putString("cs",checkingString).commit();
return id;
现在我期待看到的是:checkingString 被正确附加和保存,但 HashSet 每次重新启动应用程序时都会丢失添加的值。 但是,现在一切正常,每次重新启动应用程序时,HashSet 都会正确保存和恢复。有人可以向我解释这怎么可能?我所做的唯一更改是向 sharedPrefs 添加另一个字符串,这如何影响 HashSet?谢谢你的时间
【问题讨论】:
标签: android sharedpreferences persistence hashset