如何从SharedPreferences中检索字符串的顺序与存储的顺序相同

时间:2014-07-17 19:04:50

标签: android hashmap set sharedpreferences entryset

我把String放在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());
        }
    }

如何将String存储在SharedPreferences中并在从中获取字符串时维护订单

1 个答案:

答案 0 :(得分: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();

最好将播放列表存储在数据库中。