如何传递包含对象列表的可包裹对象?

如何解决如何传递包含对象列表的可包裹对象?

| 我在下面创建了一个“ 0”对象,我的对象包含一个“ 1”个产品。在我的构造函数中,我该如何处理为ѭ1重建ѭ0的问题? 我检查了包裹中所有可用的方法,仅可用
readArrayList(ClassLoader)
。我不确定这是否是最好的方法,您的建议是否会受到赞赏。
public class Outfits implements Parcelable {

    private String url;
    private String name;
    private List<Product> products;

    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Product> getProducts() {
        return products;
    }
    public void setProducts(List<Product> products) {
        this.products = products;
    }

    public void writetoParcel(Parcel dest,int flags) {
        Log.v(\"\",\"writetoParcel...\" + flags);
        dest.writeString(url);
        dest.writeString(name);
        dest.writeList(products);
    }


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

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

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

    /*** Here how do I populate my List of Products ***/
    private Outfits(Parcel in) {
        url = in.readString();
        name = in.readString();
        products = in.read ???????;
    }
}
    

解决方法

        如果类别ѭ6with与可包裹协议兼容,则应根据文档进行以下操作。
products = new ArrayList<Product>();
in.readList(products,Product.class.getClassLoader());
    ,        首先,您的Product对象必须实现
Parcelable
。 然后,以
writeToParcel()
方法使用
dest.writeTypedList(products)
。 最后,使用以下代码来解析列表:
products = new ArrayList<Product>();
in.readTypedList(products,Product.CREATOR);
有关更多信息,请参考正式文件:     ,        这应该工作:
in.readTypedList(products,Product.CREATOR);
    ,        以我的个人经验,http://www.parcelabler.com/是一个很棒的网站。您只需创建您的课程,然后将其复制粘贴到网站中,即可生成该课程的Parcelable版本。 我使用名为\“ Theme \”的类进行了测试,该类包含以下变量:
private String name;
private int image;
private List<Card> cards;
writeToParcel函数变为:
@Override
public void writeToParcel(Parcel dest,int flags) {
    dest.writeString(name);
    dest.writeInt(image);
    if (cards == null) {
        dest.writeByte((byte) (0x00));
    } else {
        dest.writeByte((byte) (0x01));
        dest.writeList(cards);
    }
}
生成的构造函数:
protected Theme(Parcel in) {
    name = in.readString();
    image = in.readInt();
    if (in.readByte() == 0x01) {
        cards = new ArrayList<Card>();
        in.readList(cards,Card.class.getClassLoader());
    } else {
        cards = null;
    }
}
编辑:确保Card对象也是Parcelable!     ,        同样在Product类上实现
Parcelable
,然后
in.readList(this.list,Product.class.getClassLoader());
如果上述任何解决方案均无效。     ,        另一种方法是使用readValue&writeValue。
protected Product (Parcel in) {
        ...
        in.readValue(this.getClass().getClassLoader());
    }

@Override
public void writeToParcel(Parcel parcel,int i) {
    ...
    parcel.writeValue(**list**);
}
清单中的项目应实施Parcelable     ,        干得好... 确保使用Parcelable扩展\“ Products.java \” 步骤1:
 private List<Products> products; 
第2步:
private Outfits(Parcel in) {
    products = in.createTypedArrayList(Products.CREATOR);
}
第三步:
@Override
public void writeToParcel(Parcel dest,int flags) {
    dest.writeTypedList(products);
    }
    ,        假设ѭ6正在实现
Parcelable
,则可以使用它来编写:
dest.writeValue(products);
这是为了阅读:
products = (List<Product>) in.readValue(Product.class.getClassLoader());
    ,        产品必须是可包装的工具
  Product class implements  Parcelable {
          ......
  }
然后写你对象包含列表像
public class Outfits implements Parcelable {

     private String url;
     private String name;
     private List<Product> products;

     public Outfits (Parcel pi) {

        bookName = p.readString();
        bookId = p.readInt();
        isColor = p.readInt() == 1;

        //use this well be get err
        //products=p.readArrayList(Thread.currentThread().getContextClassLoader());

        //Pass list use this 
        products= in.createTypedArrayList(Product.CREATOR);

      }

            ...get and set...

     public void writeToParcel(Parcel dest,int flags) {


        dest.writeString(url);
        dest.writeString(name);

        //use this will no working
        //dest.writeList(products);

        //Parcelable list
        out.writeTypedList(products);

     }

 }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?