2015-11-02 42 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; 
    } 
}