我试图为我的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,所以我在下面添加这个逻辑。
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;
现在我期待看到的是:checkString要追加并正确保存,但HashSet会在每次重新启动应用时丢失添加的值。 但是,现在一切正常,每次重新启动应用时,HashSet都会正确保存并恢复。有人可以向我解释这有可能吗?我做的唯一改变是在sharedPrefs中添加另一个字符串,这怎么会影响HashSet?谢谢你的时间
答案 0 :(得分:0)
希望这会对你有所帮助。对于这种类型的问题,我已经使用Hashmap
创建了两个用于存储和检索多个值的函数将数据存储为首选
public static void storePreference(HashMap<String, String> parameters) {
SharedPreferences.Editor editor = ManageMyAppsApplication.sharedPref
.edit();
Iterator<Map.Entry<String, String>> it = parameters.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> pairs = it.next();
editor.putString((String) pairs.getKey(), (String) pairs.getValue());
}
editor.commit();
}
从偏好中检索数据
public static HashMap<String, String> getPreference(String[] keys) {
HashMap<String, String> parameters = new HashMap<String, String>();
for (String key : keys) {
parameters.put(key,
ManageMyAppsApplication.sharedPref.getString(key, null));
}
return parameters;
}