【问题标题】:Get an HashSet from SharedPreferences从 SharedPreferences 获取 HashSet
【发布时间】:2016-02-01 21:36:57
【问题描述】:

我正在尝试检索 SharedPreferences 上的数据。 它被映射为key(电影名称),value(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。有什么想法吗?

【问题讨论】:

标签: dictionary sharedpreferences hashset


【解决方案1】:

获得 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;
    }
}

【讨论】:

    猜你喜欢
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2022-01-23
    • 2015-05-25
    • 1970-01-01
    • 2020-06-12
    相关资源
    最近更新 更多