Как получить строки из SharedPreferences в том же порядке, в котором они хранятся

Я поместил строку в SharedPreferences, как это

SharedPreferences preferences = getActivity().getSharedPreferences("Music_playlist", Context.MODE_PRIVATE);

                        SharedPreferences.Editor editor = preferences.edit();
                        editor.putString(Song_name, Song_name);
                        editor.commit();

и когда я пытаюсь получить строки из SharedPreferences, он не поддерживает тот же порядок, как он хранится в sharedPreferences

 SharedPreferences prefs = getActivity().getSharedPreferences("Music_playlist", Context.MODE_PRIVATE);
    Map<String,?> keys = prefs.getAll();

    if(keys!=null) {

        for (Map.Entry<String, ?> entry : keys.entrySet()) {
            Log.d("data ADDED",(String)entry.getValue());
            PLAYLIST.add((String)entry.getValue());
        }
    }

как я должен хранить строки в SharedPreferences и поддерживать порядок при получении строк из него

1 ответ

Решение

SharedPreferences как HashMap и не дают вам никакого порядка пар ключей-значений, которые вы храните в них. Чтобы упорядочить свой список воспроизведения, вам нужно использовать одну пару "ключ-значение", а значение должно представлять собой список названий песен, разделенных запятыми. На самом деле вы можете использовать любой подходящий символ-разделитель (заботясь о том, чтобы избежать имен песен) или сохранить JSON-кодированный массив.

Вот некоторый псевдокод, но это не иллюстрирует лучшую практику.

SharedPreferences preferences = getActivity().getSharedPreferences("Music_playlist", Context.MODE_PRIVATE);
String playlist = preferences.getString("playlist");
playlist += "," + escapeCsv(songName);

SharedPreferences.Editor editor = preferences.edit();
editor.putString("playlist", playlist);
editor.commit();

Может быть лучше вместо этого сохранить список воспроизведения в базе данных.

Другие вопросы по тегам