2011-04-17 141 views
1

我想迭代一个共享偏好的集合,并生成一个ArrayList的HashMaps,但有一个问题。从共享偏好Android数组

 
SharedPreferences settings = getSharedPreferences(pref, 0); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putString("key1", "value1"); 
editor.putString("key2", "value2"); 

,然后我在想沿着线的东西:

 
final ArrayList<HashMap<String,String>> LIST = new ArrayList<HashMap<String,String>>(); 
SharedPreferences settings = getSharedPreferences(pref, 0); 
Map<String, ?> items = settings.getAll(); 
for(String s : items.keySet()){ 
    HashMap<String,String> temp = new HashMap<String,String>(); 
    temp.put("key", s); 
    temp.put("value", items.get(s)); 
    LIST.add(temp); 
} 

这提供了以下错误:

The method put(String, String) in the type HashMap<String,String> is not applicable for the arguments (String, capture#5-of ?)

有没有更好的方式来做到这一点?

+0

无论API级别,检查http://sherifandroid.blogspot.com/2012/05/string-arrays-and-object-arrays-in.html – 2012-06-14 10:02:44

回答

5

哈希有正确的想法。一个对象不是一个字符串,所以.toString()是必要的。

 
final ArrayList<HashMap<String,String>> LIST = new ArrayList<HashMap<String,String>>(); 
SharedPreferences settings = getSharedPreferences(pref, 0); 
Map<String, ?> items = settings.getAll(); 
for(String s : items.keySet()){ 
    HashMap<String,String> temp = new HashMap<String,String>(); 
    temp.put("key", s); 
    temp.put("value", items.get(s).toString()); 
    LIST.add(temp); 
} 
+1

我新的,所以我不会质疑你的答案,而是问一个问题:)使用Pair的情况如何? http://developer.android.com/reference/android/util/Pair.html – 2011-04-21 02:24:31

+0

@Bill Mote - 你的意思是代替HashMaps?我想这会起作用,但问题更多的是如何遍历一组首选项,而不是如何操纵结果数据。我最终的目标是要有一个字符串,所以虽然Pair会持有这个对象,但我仍然需要从中得到一对字符串。 – aperture 2011-04-21 02:58:30

2

变化

HashMap<String,String> temp = new HashMap<String,String>(); 
final ArrayList<HashMap<String,String>> LIST = new ArrayList<HashMap<String,String>>(); 

HashMap<String,?> temp = new HashMap<String,?>(); 
final ArrayList<HashMap<String,?>> LIST = new ArrayList<HashMap<String,?>>(); 

,它应该工作。你没有放置一个字符串,而是一个对象,这会导致错误

+0

无法实例类型的HashMap aperture 2011-04-17 13:26:49