0

首先,我将引用的所有代码都在我的存储库中

我在打包 PlayList 时遇到问题打包效果很好,但反序列化最终会出现 NullPointerException 或 BadParcelableException。我无法查明异常的来源,因此我要求您检查我的代码,看看我是否滥用任何 OOP 原则或完全滥用 API。

4

1 回答 1

0

您不能将所有类作为参数传递给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;
}

笔记

您还需要ParcelableSong类中实现它才能工作,但它看起来已经在代码存储库中完成。

于 2012-10-23T22:50:13.770 回答