android– 实现包含List的Parcelable接口的Object抛出NullPointerException

android– 实现包含List的Parcelable接口的Object抛出NullPointerException,第1张

概述我正在尝试使用Parcelable接口创建一个包含可对象列表的对象.我无法读回Parcel对象.谁能指出我正确的方向?我在这里错过了什么?MyParcelable对象:publicclassMyParcelableimplementsParcelable{privateintmyInt=0;privateList<MyListClass>arrList;pu

我正在尝试使用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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1120181.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存