Android中的Parcelable对象转换错误

时间:2015-01-22 16:19:40

标签: android casting parcelable

我有一个实现parcelable的类:

public final class Product implements Parcelable {
    private Integer ID;
    private String title;

    public Product(Parcel source) {
        this.ID = source.readInt();
        this.title = source.readString();
    }

    public int describeContents() {
        return this.hashCode();
    }

    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(this.ID);
        dest.writeString(this.title);
    }

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

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

    // Getters
    ...

    // Setters
    ...
}

在我的应用中的一个点上,来自一个活动" A"我需要将自定义对象数组列表传递给另一个活动" B"所以我这样做:

ArrayList<Product> productList = new ArrayList<Product>();
productList.add(new Product(...))
productList.add(new Product(...))

...

intent.putParcelableArrayListExtra("products", productList);

来自活动&#34; B&#34;我明白了:

    ArrayList<Product> productList;

    Intent intent = this.getIntent();
    productList = (ArrayList<Product>) intent.getParcelableArrayListExtra("products");

我正在通过编译过程执行强制转换抛出错误:

Error:(38, 78) error: inconvertible types
required: ArrayList<Product>
found:    ArrayList<Parcelable>

所以我做错了什么?

相反,如果我删除了强制转换它正确编译...所以我不确定是否删除了强制转换,一旦启动它会在尝试进行隐式强制转换时抛出运行时异常。

1 个答案:

答案 0 :(得分:2)

这里有两个问题:

1)您的CREATOR不是通用的。你有:

public static final Parcelable.Creator CREATOR
        = new Parcelable.Creator() {

应该是:

public static final Parcelable.Creator<Product> CREATOR
        = new Parcelable.Creator<Product>() {

2)更改后,您不需要手动投射:

productList = intent.getParcelableArrayListExtra("products");