Android 来自intent bundle的Kotlin getParcelableArray无法将其强制转换为自定义类型

Android 来自intent bundle的Kotlin getParcelableArray无法将其强制转换为自定义类型,android,android-intent,kotlin,bundle,classcastexception,Android,Android Intent,Kotlin,Bundle,Classcastexception,我遇到了一个奇怪的问题。我有一个在kotlin中实现Parcelable接口的类a 我将类A的数组从一个活动传递到另一个活动,这里没有问题 var arrayOfA:Array<A> // just to tell the type assume the array is initialised with the value intent.putExtra("array", arrayOfA) var arrayOfA:Array//只是告诉类型假定数组是用值初始化的 inte

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

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

 var arrayOfA:Array<A> // just to tell the type assume the array is initialised with the value
 intent.putExtra("array", arrayOfA)
var arrayOfA:Array//只是告诉类型假定数组是用值初始化的
intent.putExtra(“数组”,arrayOfA)
但是,当在另一个活动中接收到它时,我无法将其分配给类型为Array的变量。当类型为parcelable时,它要求我将其分配给Array。为什么我无法将变量分配给它

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


arrayA=intent.get("array") as Array<A> // Problem here. Class cast exception
第二个活动中的

var arrayOfA:数组?=null
arrayA=intent.get(“数组”)作为数组//这里有个问题。类强制转换异常
我不明白为什么。有人能帮我吗。我不想将变量的类型更改为数组,因为它有很多相互依赖关系。(这里的类只是一个演示)

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

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)
        }
    }
}
A类(val A:字符串?、val b:字符串?):可包裹{
构造函数(地块:地块):此(
parcel.readString(),
parcel.readString()){
}
覆盖地块(地块:地块,标志:Int){
包裹。书面记录(a)
包裹书面记录(b)
}
覆盖有趣的描述内容():Int{
返回0
}
同伴对象创建者:Parcelable.CREATOR{
覆盖createFromParcel(地块:地块):A{
归还(包裹)
}
覆盖新数组(大小:Int):数组{
返回阵列fnulls(大小)
}
}
}

您需要使用
getParcelableArrayExtra
检索
Parcelable
对象,如中所示

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

我遇到了同样的问题。我就是这样解决的:

arrayOfA=intent.getParcelableArrayExtra(“数组”).map{it as A}.toTypedArray()

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

arrayOfA=intent.getParcelableArrayExtra(“数组”)作为数组

不幸的是,这显示了一个警告

未选中的演员:阵列!到阵列)

和运行时异常


java.lang.ClassCastException:无法强制转换android.os.Parcelable[] 至com.company.app.A[]


Bundle.getParcelableArray
(和
Intent.getParcelableArrayExtra
)返回
Parcelable[]
。您不能将
Parcelable[]
强制转换为
MyClass[]
。您可以将
Parcelable[]
的元素强制转换为
MyClass

改用
Bundle.getParcelableArrayList
(或其
Intent
对应项),因为它具有泛型类型

var values: List<MyClass> = listOf(...)
intent.putParcelableArrayListExtra("key", values.asArrayList())
values = intent.getParcelableArrayListExtra("key")!!

fun <E> List<E>.asArrayList(): ArrayList<E> = this as? ArrayList<E> ?: ArrayList(this)
var值:List=listOf(…)
intent.putParcelableArrayListExtra(“key”,values.asArrayList())
values=intent.getParcelableArrayListExtra(“键”)!!
乐趣列表.asArrayList():ArrayList=这是什么?ArrayList?:ArrayList(此)

您确实需要在问题中添加A类。没有它很难回答请看编辑即使我这么做了,我也会得到classcastexpection。无法将Parcelable[]转换为[]您可以粘贴堆栈跟踪吗?java.lang.ClassCastException:android.os.Parcelable[]无法转换为[]让我尝试一下并告诉您
var values: List<MyClass> = listOf(...)
intent.putParcelableArrayListExtra("key", values.asArrayList())
values = intent.getParcelableArrayListExtra("key")!!

fun <E> List<E>.asArrayList(): ArrayList<E> = this as? ArrayList<E> ?: ArrayList(this)