首先,我将引用的所有代码都在我的存储库中
我在打包 PlayList 时遇到问题,打包效果很好,但反序列化最终会出现 NullPointerException 或 BadParcelableException。我无法查明异常的来源,因此我要求您检查我的代码,看看我是否滥用任何 OOP 原则或完全滥用 API。
您不能将所有类作为参数传递给parcel.write()
. 您只需要传递copy
构造函数中接收到的参数。您还需要确保所有操作的对象都是或实现“Parcelable”。
我相信您需要更改以下内容:
在构造函数中
ArrayList<Song> copy;
public PlayList(ArrayList<Song> copy){
super(copy);
this.copy = copy;
}
在写()
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeTypedList(copy);
parcel.writeInt(actualSong);
parcel.writeInt(shuffling ? 1 : 0);
parcel.writeInt(repeating ? 1 : 0);
}
在读取()
public PlayList(Parcel serialized) {
super(serialized.readTypedList(copy, Song.WptType.CREATOR));
actualSong = serialized.readInt();
shuffling = serialized.readInt() == 1 ? true : false;
repeating = serialized.readInt() == 1 ? true : false;
}
笔记
您还需要Parcelable
在Song
类中实现它才能工作,但它看起来已经在代码存储库中完成。