我正在尝试使用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); }}
解决方法:
问题是,当MyParcelable对象的创建者调用从中重构对象的Parcel的私有构造函数时,ArrayList仍然未初始化,因此为null.
现在,方法调用readTypedList()尝试将Parcels内容写入您指定的ArrayList,该ArrayList抛出NullPointerEception,因为它尚未初始化.
解决方案是在调用该方法之前初始化ArrayList.
public MyParcelable(Parcel in) { myInt = in.readInt(); arrList = new ArrayList<MyListClass>(); in.readTypedList(arrList, MyListClass.CREATOR);}
总结 以上是内存溢出为你收集整理的android – 实现包含List的Parcelable接口的Object抛出NullPointerException全部内容,希望文章能够帮你解决android – 实现包含List的Parcelable接口的Object抛出NullPointerException所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)