Kotlin parcelable和arrayList of parcelables

我正在尝试编写一个parcelable数据对象传递给activityA到android应用程序中的activityB

我的对象是传递所有的数据,除了我的可用服务类arraylist

 data class AvailableService(val id: Int, val name: String, val description: String, val price: Double, val currency: String, val imageUrl: String) : Parcelable { companion object { @JvmField @Suppress("unused") val CREATOR = createParcel { AvailableService(it) } } protected constructor(parcelIn: Parcel) : this(parcelIn.readInt(), parcelIn.readString(), parcelIn.readString(), parcelIn.readDouble(), parcelIn.readString(), parcelIn.readString()) override fun writeToParcel(dest: Parcel?, flags: Int) { dest?.writeInt(id) dest?.writeString(name) dest?.writeString(description) dest?.writeDouble(price) dest?.writeString(currency) dest?.writeString(imageUrl) } override fun describeContents() = 0 } 

上面是可用的serviceClass ,接下来我有旅行,其中包含一个AvailableServicearraylist 。我在调试中观察到,它正在成功编写arraylist ,由于某种原因,我有一个读取数据的问题。

 data class Trip(val id: String, val status: String, val orderedServices: ArrayList<OrderedService>) : Parcelable { companion object { @JvmField @Suppress("unused") val CREATOR = createParcel { Trip(it) } } protected constructor(parcelIn: Parcel) : this(parcelIn.readString(), parcelIn.readString(), arrayListOf<OrderedService>().apply { parcelIn.readArrayList(OrderedService::class.java.classLoader) } ) override fun writeToParcel(dest: Parcel?, flags: Int) { dest?.writeString(id) dest?.writeString(status) dest?.writeList(orderedServices) } override fun describeContents() = 0 } 

如果有人想知道CREATOR的乐趣是什么,请在下面编码:

 inline fun <reified T : Parcelable> createParcel( crossinline createFromParcel: (Parcel) -> T?): Parcelable.Creator<T> = object : Parcelable.Creator<T> { override fun createFromParcel(source: Parcel): T? = createFromParcel(source) override fun newArray(size: Int): Array<out T?> = arrayOfNulls(size) } 

再次,写作成功,但阅读失败,我得到一个空arraylist ..我认为那部分是错误的:

 arrayListOf<OrderedService>().apply { parcelIn.readArrayList(OrderedService::class.java.classLoader) } 

有没有不同的方式来读/写arraylist ? 我写错了吗? 读错了?

在此先感谢您的帮助!

更换:

 arrayListOf<OrderedService>().apply { parcelIn.readArrayList(OrderedService::class.java.classLoader) } 

有:

 arrayListOf<OrderedService>().apply { parcelIn.readList(this, OrderedService::class.java.classLoader) }