Android 有意发送嵌套的包裹

Android 有意发送嵌套的包裹,android,parcelable,Android,Parcelable,我正试图发送一个包裹对象,其中还包含另一个有意图的包裹对象。然而,我得到了null指针异常。你能告诉我哪里做错了吗 A.java public class A implements Parcelable { private ArrayList<B> var; public A() { this.var = new ArrayList<B>(); } public void addToB(B b)

我正试图发送一个包裹对象,其中还包含另一个有意图的包裹对象。然而,我得到了null指针异常。你能告诉我哪里做错了吗

A.java

public class A  implements Parcelable {

    private ArrayList<B> var;

    public A()
    {
        this.var = new ArrayList<B>();  
    }

    public void addToB(B b)
    {
        var.add(b);
    }


    public ArrayList<B> getB() {
        return var;
    }

    public void setB(ArrayList<B> b) {
        this.var = b;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {

        dest.writeTypedList(this.var);

    }

    private A (Parcel in){

        in.readTypedList(this.var, B.CREATOR);
    }

    public static final Parcelable.Creator<A> CREATOR = new Parcelable.Creator<A>() {
        public A createFromParcel(Parcel in) {
            return new A(in);
        }

        public A[] newArray(int size) {
            return new A[size];
        }
    };

}
我收到的包裹是这样的:

Intent i = new Intent(Bla.this, Blabla.class);
            i.putExtra("info", objectA);
            startActivity(i);
Intent i = getIntent();
        ObjectA ci = (ObjectA)i.getParcelableExtra("info");

您没有将数据分配给构造函数中的
var
变量

像这样改变它

private A (Parcel in){

    var=(ArrayList)in.readTypedList(this.var, B.CREATOR);
}
编辑::

像这样更改代码,然后重试

@Override
public void writeToParcel(Parcel dest, int flags) {

    B[] data = new B[var.size()];
    for (int i = 0; i < data.length; i++) {
        data[i] = var.get(i);
    }
    dest.writeParcelableArray(data, flags);

}

public A(Parcel in) {
    Parcelable[] parcelables = in.readParcelableArray(Thread
            .currentThread().getContextClassLoader());
    ArrayList<B> list = new ArrayList<B>();
    for (Parcelable parcelable : parcelables) {
        list.add((B) parcelable);
    }
    var = list;
}
@覆盖
公共无效写入包裹(包裹目的地,内部标志){
B[]数据=新的B[var.size()];
对于(int i=0;i
您必须在以下位置实例化ArrayList

 private A (Parcel in){
    var = new ArrayList<B>();
    in.readTypedList(this.var, B.CREATOR);
}
private A(包裹中){
var=新的ArrayList();
in.readTypedList(this.var,B.CREATOR);
}
说它是否有效:)

您在分析arraylist时遇到问题。。。做这些改变


上面说不能从void转换到ArrayList。你知道什么是null吗?(放置Logcat)谢谢,在实例化之后,它工作了。我在访问令牌上遇到了问题,所以这就是为什么它一开始不工作的原因。谢谢,但它在readTypedList和writeTypedList上工作。问题正在实例化。感谢您发布代码。这对我创建嵌套包裹非常有帮助!也可以看看这个网站,它会自动为你创建包裹!!!查看这篇帖子:了解更多详情
 private A (Parcel in){
    var = new ArrayList<B>();
    in.readTypedList(this.var, B.CREATOR);
}
private A (Parcel in){
        in.readTypedList(this.var, B.CREATOR);
}
this.var=in.readArrayList(B.class.getClassLoader());
public void writeToParcel(Parcel dest, int flags) {
        dest.writeTypedList(this.var);
}
dest.writeList(this.var);