gpt4 book ai didi

android - 解码 Parcelable 列表时出现 ClassNotFoundException

转载 作者:行者123 更新时间:2023-12-02 11:05:59 26 4
gpt4 key购买 nike

我正在尝试在两个 Activity 之间发送一个对象。订单对象包含我这样实现的项目列表:

OrderItem Object:
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeParcelable(priceTableItem, flags);
dest.writeInt(qunatity);
dest.writeDouble(value); // quantity * unitValue
dest.writeDouble(discount);
}

protected OrderItem(Parcel in) {
id = in.readInt();
priceTableItem = in.readParcelable(PriceTableItem.class.getClassLoader());
quantity = in.readInt();
value = in.readDouble();
discount = in.readDouble();
}

在 PriceTableItem 中,我遇到一种情况,它可以包含产品 ID 或“等级”ID(“等级”是指产品具有颜色和尺寸),但永远不会同时包含这两个值。

所以我是这样实现的:

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeParcelable(priceTable, flags);
dest.writeValue(produto);
dest.writeValue(grade);
dest.writeDouble(unitPrice);
dest.writeByte((byte) (isActive ? 1 : 0));
}

protected PriceTableItem(Parcel in) {
id = in.readInt();
priceTable = in.readParcelable(PriceTable.class.getClassLoader());
product = (Product) in.readValue(Product.class.getClassLoader());
grade = (Grade) in.readValue(Grade.class.getClassLoader());
unitPrice = in.readDouble();
isactive = in.readByte() != 0;
}

当我将订单对象从 OrderListActivity 传递到 OrderDetailActivity 时,会出现问题。它读取我的项目列表之前的所有属性。当它尝试读取 OrderItem 上的 PriceTable 时,我得到:

java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.intelecto.intesigmobile/br.com.intelecto.intesigmobile.activity.PedidoDetailActivity}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling:

问题行是:

priceTableItem =  in.readParcelable(PriceTableItem.class.getClassLoader());

关于如何解决这个问题有什么想法吗?

最佳答案

仍然不知道是什么导致了错误,但我解决了问题如下

当我传递订单值时,我仅使用 Intent 来执行此操作,如下所示:

Intent i = new Intent(this, OrderDetailActivity.class);
i.putExtras("order", order);
startActivity(i);

并且,为了阅读它,我是这样做的:

Order order = getIntent().getParcelableExtra("order");

因此,我使用了 Bundle 来传递值。

Intent i = new Intent(this, OrderDetailActivity.class);

Bundle b = new Bundle();
b.putParcelable("order", order);

i.putExtras(b);
startActivity(i);

还有

Bundle b = getIntent().getExtras();

Order order = b.getParcelable("order");

关于android - 解码 Parcelable 列表时出现 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35589096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com