![](/img/trans.png)
[英]intent.getExtra returns null while passing data from activity to BroadcastReceiver
[英]Passing Parcelable from Activity A to Activity B - getExtra is null
當我使用Intent
於通過Parcelable
從活動A對象到活動B,B的活性getExtra為空。 按照我的代碼:
class A(var id: Int, var name: String,var bList:MutableList<B>) : Parcelable {
override fun writeToParcel(p0: Parcel, p1: Int) {
p0.writeInt(id)
p0.writeString(name)
p0.writeTypedList(bList)
}
override fun describeContents(): Int {
return 0
}
constructor(parcel: Parcel) : this(
parcel.readInt(),
parcel.readString(),
parcel.createTypedArrayList(B.CREATOR)
)
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)
}
}
}
B級
class B(var id: Int, var name: String, var a: A) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readInt(),
parcel.readString(),
parcel.readParcelable(A::class.java.classLoader))
override fun writeToParcel(p0: Parcel, p1: Int) {
p0.readInt()
p0.readString()
p0.readParcelable<A>(A.javaClass.classLoader)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<B> {
override fun createFromParcel(parcel: Parcel): B {
return B(parcel)
}
override fun newArray(size: Int): Array<B?> {
return arrayOfNulls(size)
}
}
}
我使用意圖來傳遞數據:
val list = mutableListOf<B>()
val a = A(1,"A",list)
val b1 = B(1,"B1",a)
val b2 = B(2,"B2",a)
list.add(b1)
list.add(b2)
val intent = Intent()
intent.setClass(context, AboutActivity::class.java)
intent.putExtra("frank",a)
startActivity(intent)
我正在使用以下代碼來檢索數據:
val bundle = intent.extras
val a:A = bundle.getParcelable("frank")
編寫Parcelable時,此數據結構是否為死循環?
您遇到了兩個問題。
首先,類B
上的writeToParcel()
函數正在讀取而不是寫入。 您最有可能打算這樣做:
override fun writeToParcel(p0: Parcel, p1: Int) {
p0.writeInt(id)
p0.writeString(name)
p0.writeParcelable(a, 0)
}
進行更改后,您將遇到第二個問題:由於模型之間存在相互依賴關系,因此會出現堆棧溢出錯誤。 A
依賴於B
對象的列表,每個對象都再次引用了A
對象。 Android的包裹代碼不支持這種循環依賴關系 。
大約在此之前,有一張錯誤單被打開,但是它的狀態被標記為Won't Fix (Infeasible)
。
在另一篇SO文章中提到了一些變通方法,但總的來說,最好是盡可能避免循環依賴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.