gpt4 book ai didi

java - 使用 GSON 从 JSON 转换,无法将 ArrayList 转换为对象

转载 作者:行者123 更新时间:2023-12-02 02:02:07 25 4
gpt4 key购买 nike

我正在尝试通过将 ArrayList 转换为 JSON 来使用 SharedPreferences 保存数据。每当我尝试检索数据并将其转换回来时,我都会收到无法将 ArrayList 转换为播放列表错误。你知道这里可能出了什么问题吗?

我的播放列表类:

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;
}

}

我在 Activity 中创建所有播放列表后调用的转换为 JSON 方法:

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;
}
}

以及我在用户重新启动应用程序后调用的读取 JSON 方法:

    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;
}

最佳答案

我认为问题在于 Playlist 类扩展了 ArrayList。 GSON 正在尝试将您的 Playlist 序列化为 Parcelable 列表。从您的类来看,Playlist 看起来并不真正需要扩展ArrayList。我尝试运行您的示例(我必须删除很多内容才能降到最低限度),并且它将每个 Playlist 序列化为空列表(字符串 "[]"),无论 playlistSongs 中有什么内容。我删除了父类(super class),它开始按预期工作。

关于java - 使用 GSON 从 JSON 转换,无法将 ArrayList 转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51426179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com