2011-06-02 1 views
3

Я создал простую игру. В конце концов, имя пользователя и оценка должны попасть в список рекордов. Для этого я хотел бы сохранить эти данные в sharedpreferences. Я видел сообщение, и я пытаюсь применить его к моему приложению, но он закрывает. Я даже не знаю, правильно ли я это делаю. Поэтому я помещаю эти ключевые слова (игрок, оценка) в arraylist. Оттуда я могу получить значения в списке. Это всего лишь пример.Android sharedpreferences в arraylist

SharedPreferences.Editor scoreEditor = myScores.edit(); 
     scoreEditor.putString("PLAYER", "Thomas"); 
     scoreEditor.putString("SCORE", "5"); 
     scoreEditor.commit(); 


     final ArrayList<HashMap<String,String>> LIST = new ArrayList<HashMap<String,String>>(); 
     Map<String, ?> items = myScores.getAll(); 

     for(String s : items.keySet()){ 
      HashMap<String,String> hmap = new HashMap<String,String>(); 
      hmap.put("PLAYER", s); 
      hmap.put("SCORE", items.get(s).toString()); 

      LIST.add(hmap); 
     } 

     Toast.makeText(Start.this, "LIST size: "+LIST.size(), Toast.LENGTH_LONG).show(); 

Для меня также было бы хорошо, если я хранить эти данные, как это:

scoreEditor.putString("DATA", "Thomas" + "-" + "5"); 

и положить, что в ArrayList<String> LIST = new ArrayList<String>();

, но я не знаю, как это сделать.

Не могли бы вы, ребята, помочь мне с этим?

Редактировать: Так что я мог пойти другим путем, как предложил Хафазард. Я собрал этот код, но я не знаю, способ ли это сделать. Я еще не тестировал его, так как sg неправильно с sharedpreferences, и я все еще пытаюсь понять это.

SharedPreferences.Editor scoreEditor = myScores.edit(); 
scoreEditor.putString("DATA", "Thomas" + "-" + "5"); 
scoreEditor.commit(); 


HashSet<String> hset=new HashSet<String>(); 
hset.addAll((Collection<? extends String>) myScores.getAll()); 

ArrayList<String> LIST = new ArrayList<String>(hset); 
+0

Когда у вас есть сила, вы должны сначала взглянуть на логарифм и посмотреть, где проблема, и характер исключения, которое заставляет закрыться. – Snicolas

ответ

3

SharedPreferencesEditor не принимает списки, но он принимает Sets. Вы можете преобразовать свой список в HashSet или что-то подобное и сохранить его таким образом. Когда вы его прочитаете, переведите его в ArrayList, сортируйте его, если нужно, и вы хорошо пойдете.

Обратите внимание, что Набор должен быть набором строк, поэтому вам необходимо будет установить свою настройку "Thomas" + "-" + "5".

Edit: Для вашего нового обновления, я больше думал о чем-то вроде

//Retrieve the values 
Set<String> set = new HashSet<String>(); 
set = myScores.getStringSet("key", null); 

//Set the values 
Set<String> set = new HashSet<String>(); 
set.addAll(listOfExistingScores); 
scoreEditor.putStringSet("key", set); 
scoreEditor.commit(); 

Этот код не тестировался, но он должен работать

EDIT: Если ваш уровень API ниже get/setStringSet() уровня, то вы можете попробовать следующее:

1) Превратите свой список высоких баллов в строку с разделителями. Это означает, что если бы вы [Tom, 1 »,« Ed, 5 »], вы могли бы пропустить его и превратить в String, например« Tom, 1 | Ed, 5 ». Вы можете легко сохранить это с помощью setString(..).

2) Когда вы хотите прочитать значения обратно, выполните getString(..), а затем String.split("|"), чтобы получить исходный список. Ну, он возвращает массив, но может быть легко преобразован в список.

+0

Это начало. Я обновил главный пост. – erdomester

+0

Что вы обновили? – Haphazard

+0

Я обновил сейчас. Извините, часть sharedpreferences приводит к силе закрытия, и я пытаюсь понять причину. – erdomester