Как получить строки из 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();
Может быть лучше вместо этого сохранить список воспроизведения в базе данных.