2017-09-12 58 views
0

我遇到了一个奇怪的问题。我有一个在kotlin中实现Parcelable接口的类A.Kotlin从意图捆绑getParcelableArray无法将其转换为自定义类型

我将类A的数组从一个活动传递给另一个没有问题的地方。

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

不过,虽然在另一个活动接受它,我不能把它分配给数组类型的变量,它要求我把它分配给磁盘阵列当是类型parcelable为什么我不能给它分配变量。

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


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

我无法理解为什么。有人能帮助我吗?我不想将变量类型更改为Array,因为它与许多相互依赖关系一样(此类仅为演示)

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

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) 
     } 
    } 
} 
+0

你真的需要类A添加到的问题。没有它,它很难回答 – Zoe

+0

请参阅编辑 –

回答

1

您需要使用getParcelableArrayExtra检索Parcelable对象为

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

class A由于NullableNon Nullable在Kotlin

创作者应该有如下

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) 
     } 
    } 
+0

即使我这样做,我正在获得classcastexpection。不能将Parcelable []分配给A [] –

+0

你能粘贴你的堆栈跟踪吗? –

+0

java.lang.ClassCastException:android.os.Parcelable []不能转换为A [] –

相关问题