2017-09-12 57 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 [] –

相關問題