I'm trying to save my data using SharedPreferences by converting my ArrayList into JSON. Whenever I try to retrieve data and convert it back I get cannot cast ArrayList into Playlist error. Any ideas what's might be wrong here?
My Playlist class:
public class Playlist extends ArrayList<Parcelable> implements Parcelable{
private ArrayList<Song> playlistSongs;
private String name;
public Playlist(String name) {
this.name = name;
this.playlistSongs = new ArrayList<>();
}
protected Playlist(Parcel in) {
playlistSongs = in.createTypedArrayList(Song.CREATOR);
name = in.readString();
}
public static final Creator<Playlist> CREATOR = new Creator<Playlist>() {
@Override
public Playlist createFromParcel(Parcel in) {
return new Playlist(in);
}
@Override
public Playlist[] newArray(int size) {
return new Playlist[size];
}
};
public ArrayList<Song> getPlaylistSongs() {
return playlistSongs;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
public int getCount(){
return playlistSongs.size();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeTypedList(playlistSongs);
parcel.writeString(name);
}
@Override
public Stream<Parcelable> stream() {
return null;
}
@Override
public Stream<Parcelable> parallelStream() {
return null;
}
}
My convert to JSON method I call after creating all of the playlists in activity:
public boolean writeJSON(ArrayList<Playlist> playlists) {
SharedPreferences mSettings = getSharedPreferences("Playlists", Context.MODE_PRIVATE);
SharedPreferences.Editor mEditor = mSettings.edit();
Type type = new TypeToken<ArrayList<Playlist>>() {
}.getType();
try {
String writeValue = mGson.toJson(playlists, type);
mEditor.putString("Playlists", writeValue);
mEditor.commit();
return true;
} catch (Exception e) {
return false;
}
}
And my read JSON method I call after user relaunch application:
public ArrayList<Playlist> readJSON() {
SharedPreferences mSettings = getSharedPreferences("Playlists", Context.MODE_PRIVATE);
Type collectionType = new TypeToken<ArrayList<Playlist>>() {
}.getType();
String loadValue = mSettings.getString("Playlists", null);
ArrayList<Playlist> temp = mGson.fromJson(loadValue, collectionType);
return temp;
}