私はアンドロイドアプリケーションでアクティビティAからアクティビティBに渡すパーセル可能なデータオブジェクトを書き込もうとしています。パーセルブルのパーセル化可能なarrayListのリスト
私の目的は、上記の私のクラス利用可能なサービスの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
}
私はAvailableService
のarraylist
を保持トリップを持って次の、利用可能serviceClass
ある以外、すべてのデータを渡している..私はこれを観察デバッグでは、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の楽し何不思議場合に行い、以下のコード:私は空のarraylist
を取得し、
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)
}
は再び、書き込みが成功しますが、読み取りに失敗した... 私はその部分を考えます故障したものです:
arrayListOf<OrderedService>().apply {
parcelIn.readArrayList(OrderedService::class.java.classLoader)
}
/書き込みarraylist
を読むための別の方法は何ですか?私は間違って書いていますか?それを間違って読んで?
ありがとうございました!