gpt4 book ai didi

android - Intent bundle 中的 Kotlin getParcelableArray 无法将其转换为自定义类型

转载 作者:搜寻专家 更新时间:2023-11-01 07:45:11 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题。我有一个在 kotlin 中实现 Parcelable 接口(interface)的 A 类。

我将 A 类数组从一个 Activity 传递到另一个 Activity ,这里没有问题。

 var arrayOfA:Array<A> // just to tell the type assume the array is initialised with the value
intent.putExtra("array", arrayOfA)

但是在另一个 Activity 中接收它时,我无法将它分配给 Array 类型的变量,它要求我在 A 为 parcelable 类型时将其分配给 Array 为什么我无法将变量分配给它。

in second Activity 
var arrayOfA:Array<A>?=null


arrayA=intent.get("array") as Array<A> // Problem here. Class cast exception

我不明白为什么。有人可以帮我吗?我不想将变量的类型更改为数组,因为它有很多相互依赖。(这里的类只是一个演示)

========================================

class A(val a:String?,val b:String?):Parcelable {
constructor(parcel: Parcel) : this(
parcel.readString(),
parcel.readString()) {
}

override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(a)
parcel.writeString(b)
}

override fun describeContents(): Int {
return 0
}

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

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

最佳答案

我遇到了同样的问题。这就是我能够解决它的方法:

arrayOfA = intent.getParcelableArrayExtra("array").map { it as A }.toTypedArray()

由于某些原因,这不起作用:

arrayOfA = intent.getParcelableArrayExtra("array") as Array<A>

不幸的是出现了警告

Unchecked cast: Array<(out) Parcelable!>! to Array)

和运行时异常

java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to com.company.app.A[]

关于android - Intent bundle 中的 Kotlin getParcelableArray 无法将其转换为自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46168887/

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