我正在尝试检索SharedPreferences上的数据。 它被映射为键(电影的名称),值(HashSet,包含与电影相关的所有信息),如下所示:
SharedPreferences.Editor preferencesEditor = preferences.edit();
preferencesEditor.putStringSet(movieInfo[1], new HashSet<String>(Arrays.asList(movieInfo)));
preferencesEditor.commit();
我想获取该HashSet以便能够使用该信息 我能够做到这一点:
SharedPreferences preferences = getContext().getSharedPreferences("favorites_list", Context.MODE_PRIVATE);
Map<String, String> map = (Map<String, String>) preferences.getAll();
String a = null;
for (Map.Entry<String, String> entry : map.entrySet()){
a = entry.getValue();
}
问题是getValue()返回一个字符串,因此必须将其设置为字符串,但该值本身是一个HashSet,因此它返回一个ClassCastException错误,即HashSet不能转换为String。有什么想法吗?
答案 0 :(得分:0)
获得HashSet后,抛出它并迭代它以获取值
SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);
for (Entry<String, ?> entry : appPreferences.getAll().entrySet()) {
String key = entry.getKey();
System.out.println("key " + key);
System.out.println("value " + entry.getValue());
if(key.equals("YOUR_KEY_NAME")) {
if(entry.getValue() instanceof HashSet) {
Set<String> set = (HashSet)entry.getValue();
for(String s: set) {
System.out.println(s);
}
}
break;
}
}