从SharedPreferences获取HashSet

时间:2015-11-02 03:20:59

标签: dictionary sharedpreferences hashset

我正在尝试检索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。有什么想法吗?

1 个答案:

答案 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;
    }
}