我把Parcelable
對象Intent
下一個Activity
:IllegalStateException異常:parcel.readString()不能爲空
val intent = Intent(mContext, ShowTestActivity::class.java)
intent.putExtra("test", test)
Log.d("myLog", "${intent.getParcelableExtra<Test>("test")}") // No problem
mContext.startActivity(intent)
而得到這個對象在明年Activity
:
if (!intent.hasExtra("test")) throw Exception("Intent doesn't has 'test' extra")
val test: Test = intent.getParcelableExtra("test")
這裏都扔例外:
public open class QBase(): Parcelable {
...
protected constructor(parcel: Parcel?) : this() {
parcel?.let {
question = parcel.readString() // parcel.readString() must not be null
helpText = parcel.readString()
qValue = parcel.readDouble()
qType = QType.valueOf(parcel.readString())
}
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(question)
parcel.writeString(helpText)
parcel.writeDouble(qValue)
parcel.writeString(qType.name)
}
...
}
並在測試中:
public class Test(): Parcelable {
...
public var questions: ArrayList<QBase> = ArrayList()
constructor(parcel: Parcel?): this() {
parcel?.let {
...
parcel.readTypedList(questions, QBase.CREATOR)
}
}
override fun writeToParcel(p: Parcel?, p1: Int) {
p?.let {
...
it.writeTypedList(questions)
}
}
...
}
它是一個例外:
所致:java.lang.IllegalStateException:parcel.readString()絕不能以com.vadim.hasdfa.justlearn.Model.Questions空 。 utils.QBase。(QBase.kt:22) at com.vadim.hasdfa.justlearn.Model.Questions.utils.QBase $ CREATOR.createFromParcel(QBase.kt:70) at com.vadim.hasdfa.justlearn.Model .Questions.utils.QBase $ CREATOR.createFromParcel(QBase.kt:68) at android.os.Parcel.readTypedList(Pa (Test.kt:28) at com.vadim.hasdfa.justlearn.Model.Test $ CREATOR.createFromParcel(Test.kt:47 ) at com.vadim.hasdfa.justlearn.Model.Test $ CREATOR.createFromParcel(Test.kt:45) at android.os.Parcel.readParcelable(Parcel.java:2787) at android.os.Parcel.readValue (Parcel.java:2681) at android.os.Parcel.readArrayMapInternal(Parcel.java:3048) at android.os.BaseBundle.unparcel(BaseBundle.java:257) at android.os.BaseBundle.containsKey(BaseBundle .java:435) at android.content.In tent.hasExtra(Intent.java:6859) at com.vadim.hasdfa.justlearn.Controller.Activity.BrowseTest.ShowTestActivity.onCreate(ShowTestActivity.kt:28) at android.app.Activity.performCreate(Activity.java: 6980) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1593) at andr oid.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6540) at java。 lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java :767)
您可以在獲取對象之前在'ShowTestActivity'中添加'Intent intent = getIntent();'。 – KeLiuyue
在kotlin'intent'中表示Java中的getIntent()' – Hasdfa
哦,對於我在科特林的窮人抱歉。 – KeLiuyue