将自定义对象添加到ArrayList已保存在sharedpreference中

时间:2017-12-21 10:11:47

标签: sharedpreferences android-mediaplayer android-sharedpreferences android-music-player audio-player

我试图实施"最近播放"我的音乐播放器中的播放列表,显示最近由用户播放的那些歌曲(在recyclerView中)。但我的代码所做的是,它只存储最后播放的歌曲。

我想要的是:如果我的音乐播放器中有2首歌曲,请说A和B.我先播放歌曲A.然后它应该被添加到最近播放的列表(在第一个位置)。之后,如果我播放歌曲B,它也应该被添加到列表中(不替换A)但是按下A并且B占据第一个位置。因此,最终列表应如下所示:B位于顶部,A位于其下方。

我的应用程序做了什么:如果我先播放歌曲A然后播放歌曲B,如果我去最近播放的列表播放两者之后,我可以在那里看到两首歌曲。如果我先播放歌曲A然后转到最近播放的列表它就在那里,在回来之后我播放歌曲B然后转到最近播放的列表它只显示歌曲B.在后一种情况下,两者都应该被看到,但它不是。我想每次都会创建一个新阵列。

代码:

public void storeAudioPlaylist(SongInfoModel songInfoModel) {
preferences = context.getSharedPreferences(STORAGE, 
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
Gson gson = new Gson();
playlistStore.add(songInfoModel);
String json = gson.toJson(playlistStore);
editor.putString("audioPlayList", json);
editor.apply();
}

 public ArrayList<SongInfoModel> loadAudioPlaylist() {
preferences = context.getSharedPreferences(STORAGE, 
Context.MODE_PRIVATE);
Gson gson = new Gson();
String json = preferences.getString("audioPlayList", null);
Type type = new TypeToken<ArrayList<SongInfoModel>>() {
}.getType();
return gson.fromJson(json, type);
}

以上2个函数用于将歌曲对象存储到数组并分别检索数组。

代码:

  public void onClickListener(SongInfoModel song, int position) {

storageUtil.storeAudioPlaylist(song); // this calls the method and passes 
                                     the song model(ID,name,artist..etc)


 } 

0 个答案:

没有答案