массив android из общих настроек

Я пытаюсь перебрать коллекцию общих предпочтений и создать ArrayList из HashMaps, но у меня возникла проблема.

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 ?)

Есть лучший способ сделать это?


person aperture    schedule 17.04.2011    source источник
comment
Независимо от уровня API, проверьте sherifandroid.blogspot .com / 2012/05 /   -  person Sherif elKhatib    schedule 14.06.2012


Ответы (2)


У Хаче была правильная идея. Объект не является строкой, поэтому .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);
}
person aperture    schedule 17.04.2011
comment
Я новичок, поэтому я не сомневаюсь в вашем ответе, а скорее задаю вопрос :) А как насчет использования Pair? developer.android.com/reference/android/util/Pair.html - person Bill Mote; 21.04.2011
comment
@Bill Mote - Вы имеете в виду вместо HashMaps? Я полагаю, это сработает, но вопрос был больше в том, как перебирать набор настроек, чем в том, как манипулировать полученными данными. Моя конечная цель состояла в том, чтобы получить String, поэтому, хотя Pair могла бы удерживать объект, мне все равно нужно было бы получить от него пару строк. - person aperture; 21.04.2011

Изменять

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

to

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

и он должен работать. Вы не помещаете строку, а объект, это вызывает ошибку

person Hache    schedule 17.04.2011
comment
Не удается создать экземпляр типа HashMap ‹String,?› - person aperture; 17.04.2011