gpt4 book ai didi

android - 实现包含 List 的 Parcelable 接口(interface)的对象抛出 NullPointerException

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:20 26 4
gpt4 key购买 nike

我正在尝试使用 Parcelable 接口(interface)创建一个包含对象的 List 的对象。我无法读回 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);
}
}

最佳答案

问题是,当您的 MyParcelable 对象的创建者调用私有(private)构造函数,该构造函数采用您从中重建对象的 Parcel 时,ArrayList 仍未初始化,因此 null

现在方法调用 readTypedList() 尝试将 Parcel 的内容写入您指定的 ArrayList,这会抛出一个 NullPointerEception 因为它还没有初始化。

解决方案是在调用该方法之前初始化ArrayList

public MyParcelable(Parcel in) {
myInt = in.readInt();
arrList = new ArrayList<MyListClass>();
in.readTypedList(arrList, MyListClass.CREATOR);
}

关于android - 实现包含 List 的 Parcelable 接口(interface)的对象抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6951759/

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