构建Parcel时,ArrayList <string>为null

时间:2015-08-28 15:22:14

标签: android arraylist parcelable parcel

我的一个类有3个属性ArrayList,如下所示:

public class Product implements Parcelable{

// other properties

private ArrayList<String> categoryIds;
private ArrayList<String> categorySlugs;
private ArrayList<String> categoryNames;

public Product(){}

// getters and setters

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    // writing other properties
    dest.writeStringList(categoryIds); // here aren't null
    dest.writeStringList(categorySlugs);
    dest.writeStringList(categoryNames);
}

public static final Parcelable.Creator<Product> CREATOR = new Parcelable.Creator<Product>() {
    public Product createFromParcel(Parcel pc) {
        return new Product(pc);
    }
    public Product[] newArray(int size) {
        return new Product[size];
    }
};

public Product(Parcel in){

    // reading other properties, all correct

    in.readStringList(categoryIds); // from here are all null
    in.readStringList(categorySlugs);
    in.readStringList(categoryNames);
}

}

阅读Parcel构造函数中的注释。这三个是null,但在函数&#34; writeToParcel&#34;他们不是空的。所有其他属性都是正确的。我在这里失踪了什么?

谢谢:)

2 个答案:

答案 0 :(得分:0)

您永远不会实例化List以创建实例。

例如,您需要:

private ArrayList<String> categoryIds = new ArrayList<String>();

new ArrayList<String>()是关键部分,因为这是构造对象实例的地方。

更好的是,在Product的构造函数中构造这些列表。也请考虑coding to interface

答案 1 :(得分:0)

使用以下代码阅读列表:

foo