2015-11-02 68 views
0

我试图检索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的错误。有什么想法吗?

+0

参见:http://stackoverflow.com/questions/14705860/saving-serializable-objects-list-into- sharedpreferences – alfasin

回答

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