You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为包含自定义对象ArrayList的类添加Parcelable实现?

你遇到的报错是两个问题共同导致的:

  1. writeToParcel 方法中没有写入products字段,且字段读写顺序不匹配
  2. 构造函数中没有正确实现products字段的读取逻辑

修正步骤

1. 修正writeToParcel方法

在写入user_id之后、addressId之前,加入products的写入逻辑,保证和构造函数的读取顺序完全一致:

override fun writeToParcel(parcel: Parcel, flags: Int) {
    parcel.writeString(id)
    parcel.writeString(user_id)
    // 新增写入products列表
    parcel.writeTypedList(products)
    parcel.writeString(addressId)
    parcel.writeString(image)
    parcel.writeString(title)
    parcel.writeString(subTotal)
    parcel.writeString(shippingCharge)
    parcel.writeString(total)
}

2. 修正构造函数中的products读取逻辑

用createTypedArrayList方法直接读取Cart类型的ArrayList,替换原来的TODO:

constructor(parcel: Parcel) : this(
    parcel.readString().toString(),
    parcel.readString().toString(),
    // 替换TODO为如下代码
    parcel.createTypedArrayList(Cart.CREATOR) ?: arrayListOf(),
    parcel.readString().toString(),
    parcel.readString().toString(),
    parcel.readString().toString(),
    parcel.readString().toString(),
    parcel.readString().toString(),
    parcel.readString().toString()
)

注意:请确保你的Cart类已经正确实现Parcelable接口,且包含名为CREATOR的伴生对象实现。


完整修正后代码

class Orders (
    var id:String="",
    var user_id:String="",
    var products: ArrayList<Cart> = arrayListOf(),
    var addressId:String="",
    val image:String="",
    val title:String="",
    val subTotal:String="",
    val shippingCharge:String="",
    val total:String="",
) : Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.readString().toString(),
        parcel.readString().toString(),
        parcel.createTypedArrayList(Cart.CREATOR) ?: arrayListOf(),
        parcel.readString().toString(),
        parcel.readString().toString(),
        parcel.readString().toString(),
        parcel.readString().toString(),
        parcel.readString().toString(),
        parcel.readString().toString()
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(id)
        parcel.writeString(user_id)
        parcel.writeTypedList(products)
        parcel.writeString(addressId)
        parcel.writeString(image)
        parcel.writeString(title)
        parcel.writeString(subTotal)
        parcel.writeString(shippingCharge)
        parcel.writeString(total)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<Orders> {
        override fun createFromParcel(parcel: Parcel): Orders {
            return Orders(parcel)
        }

        override fun newArray(size: Int): Array<Orders?> {
            return arrayOfNulls(size)
        }
    }
}

内容的提问来源于stack exchange,提问作者Sarthak Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:54:05