如何在Android上包裹自定义列表?

时间:2012-10-23 17:01:26

标签: android serialization

首先,我将引用的所有代码都在my repository

我遇到了包裹PlayList的问题,parcelizing工作奇迹,但反序列化最终导致NullPointerException或BadParcelableException。我无法确定异常的来源,因此我要求您检查我的代码,看看我是否滥用任何OOP原则或彻底滥用API。

1 个答案:

答案 0 :(得分: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;
}

注意

您还需要在Parcelable类中实现Song才能使其正常工作,但它看起来已在代码存储库中完成。