我正在尝试使用List
接口创建一个包含Parcelable
个对象的对象。我无法阅读Parcel
对象。
有人能指出我正确的方向吗?我在这里缺少什么?
MyParcelable
对象:
public class MyParcelable implements Parcelable {
private int myInt = 0;
private List<MyListClass> arrList;
public List<MyListClass> getArrList() {
return arrList;
}
public void setArrList(List<MyListClass> arrList) {
this.arrList = arrList;
}
public int getMyInt() {
return myInt;
}
public void setMyInt(int myInt) {
this.myInt = myInt;
}
MyParcelable() {
// initialization
arrList = new ArrayList<MyListClass>();
}
public MyParcelable(Parcel in) {
myInt = in.readInt();
in.readTypedList(arrList, MyListClass.CREATOR);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel outParcel, int flags) {
outParcel.writeInt(myInt);
outParcel.writeTypedList(arrList);
}
public static final Parcelable.Creator<MyParcelable> CREATOR =
new Parcelable.Creator<MyParcelable>() {
@Override
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
@Override
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
}
MyListClass
对象:
public class MyListClass implements Parcelable{
private int test;
public MyListClass()
{}
public MyListClass(Parcel read){
test = read.readInt();
}
public int getTest() {
return test;
}
public void setTest(int test) {
this.test = test;
}
public static final Parcelable.Creator<MyListClass> CREATOR =
new Parcelable.Creator<MyListClass>() {
@Override
public MyListClass createFromParcel(Parcel source) {
return new MyListClass(source);
}
@Override
public MyListClass[] newArray(int size) {
return new MyListClass[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel arg0, int arg1) {
arg0.writeInt(test);
}
}
答案 0 :(得分:16)
问题在于,当MyParcelable
对象的创建者调用从中重构对象的Parcel
的私有构造函数时,ArrayList
仍然未初始化{{1 }}
现在方法调用null
尝试将readTypedList()
内容写入您指定的Parcel
,因为它尚未初始化,因此会引发ArrayList
。
解决方案是在调用该方法之前初始化NullPointerEception
。
ArrayList
答案 1 :(得分:1)
in.readTypedList(arrList, MyListClass.CREATOR);
return new MyParcelable(in);
时,此时arrList尚未初始化