首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android中的parcelable数组类问题

Android中的parcelable数组类问题
EN

Stack Overflow用户
提问于 2016-11-18 06:01:47
回答 1查看 124关注 0票数 1

我有一个类,我试图解析使用parcelable与适配器一起使用。

这些是项目(简略)

代码语言:javascript
复制
public class Stops implements Parcelable{
    private String stop_id;
    private String type;
    private String location;
    private String address;
    private String city;
    private String state;
    private String zip;
    private String from;
    private String to;

    private Commodities[] commodities;

.. etc etc etc

以及分析它的代码:

代码语言:javascript
复制
@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeArray(commodities);

}
private Stops(Parcel in){
    commodities = in.readArray(); // the error is right here
}
public static final Creator<Stops> CREATOR = new Creator<Stops>(){
    @Override
    public Stops createFromParcel(Parcel source) {
        return new Stops(source);
    }
    @Override
    public Stops[] newArray(int size){
        return new Stops[size];
    }
};

我发现了一个错误

代码语言:javascript
复制
private Stops(Parcel in){
    commodities = in.readArray();
}

有些解决方案涉及将dest.writeArray()更改为dest.writeParcelable(etc etc),尽管这样做会给我带来一个奇怪的错误,即我没有传递一个可打包的(商品有自己的类定义,并且它是parcelable....which的原因)

那么,最好的解决办法是什么呢?

按要求提供的商品类别:

代码语言:javascript
复制
public class Commodities  implements Parcelable{
    private String item;
    private String description;
    private String poNumber;
    private String qty;
    private String weight;

    public Commodities() {}

    public String getItem() {
        return item;
    }

    public void setItem(String item) {
        this.item = item;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getPoNumber() {
        return poNumber;
    }

    public void setPoNumber(String poNumber) {
        this.poNumber = poNumber;
    }

    public String getQty() {
        return qty;
    }

    public void setQty(String qty) {
        this.qty = qty;
    }

    public String getWeight() {
        return weight;
    }

    public void setWeight(String weight) {
        this.weight = weight;
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(item);
        dest.writeString(description);
        dest.writeString(poNumber);
        dest.writeString(qty);
        dest.writeString(weight);
    }
    private Commodities(Parcel in){
        item = in.readString();
        description  =in.readString();
        poNumber = in.readString();
        qty = in.readString();
        weight = in.readString();
    }

    public static final Creator<Commodities> CREATOR = new Creator<Commodities>() {
        @Override
        public Commodities createFromParcel(Parcel source) {
            return new Commodities(source);
        }
        @Override
        public Commodities[] newArray(int size) {
            return new Commodities[size];}
    };
}

给出更多我想要做的事情的背景。有各种各样的止损点(这也是一个数组),里面有一组商品。止损点和大宗商品都相应地被填充。我要做的是将这些信息发送到回收视图适配器中。

因此,每一站都是一个包含各种数据的数组,其中一部分是另一组商品。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-18 06:34:32

您需要为自定义对象调用CREATER

代码语言:javascript
复制
 public class Stops implements Parcelable {

    private String stop_id;
    private String type;
    private String location;
    private String address;
    private String city;
    private String state;
    private String zip;
    private String from;
    private String to;
    private Commodities[] commodities;


   protected Stops(Parcel in) {
    stop_id = in.readString();
    type = in.readString();
    location = in.readString();
    address = in.readString();
    city = in.readString();
    state = in.readString();
    zip = in.readString();
    from = in.readString();
    to = in.readString();
    commodities = in.createTypedArray(Commodities.CREATOR);
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(stop_id);
    dest.writeString(type);
    dest.writeString(location);
    dest.writeString(address);
    dest.writeString(city);
    dest.writeString(state);
    dest.writeString(zip);
    dest.writeString(from);
    dest.writeString(to);
    dest.writeTypedArray(commodities, flags);
}

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

public static final Creator<Stops> CREATOR = new Creator<Stops>() {
    @Override
    public Stops createFromParcel(Parcel in) {
        return new Stops(in);
    }

    @Override
    public Stops[] newArray(int size) {
        return new Stops[size];
    }
};
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40670314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档