Android поделился своими предпочтениями в arraylist - PullRequest
3 голосов
/ 02 июня 2011

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

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.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);

1 Ответ

3 голосов
/ 02 июня 2011

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

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

Редактировать: В вашем новом обновлении я думал о чем-то вроде

//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();

Этот код не проверен, но он должен работать

РЕДАКТИРОВАТЬ: Если ваш уровень API ниже уровня get/setStringSet(), вы можете попробовать это:

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

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

...