我尝试通过使用intent.putextra("结果",resultBean)将额外的活动传递给另一个活动,但是我有以下错误
android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.tai.androidtai.domain.bean.ResultBean
我试图通过stackoverflow找到解决方案,但没有找到。
我试图遵循readparcel和writeparcel之间的相同序列,但没有改变任何内容。
在这里我的以下代码:
活动:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_user_details)
ButterKnife.bind(this)
AndroidInjection.inject(this)
mPresenter.subscribe(this)
displayAllUserInformation(intent.getParcelableExtra("result"))
}
bean:
class ResultBean private constructor(parcel: Parcel) : Parcelable {
@SerializedName("id")
private var mId: Int? = null
@SerializedName("name")
private var mName: String? = ""
@SerializedName("status")
private var mStatus: String? = ""
@SerializedName("species")
private var mSpecies: String? = ""
@SerializedName("gender")
private var mGender: String? = ""
@SerializedName("image")
private var mImageUrl: String? = ""
init {
mId = parcel.readInt()
mName = parcel.readString()
mStatus = parcel.readString()
mSpecies = parcel.readString()
mGender = parcel.readString()
mImageUrl = parcel.readString()
}
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeInt(mId!!)
dest.writeString(mName)
dest.writeString(mStatus)
dest.writeString(mSpecies)
dest.writeString(mGender)
dest.writeString(mImageUrl)
}
override fun describeContents(): Int {
return 0
}
fun getId(): Int {
return mId!!
}
fun getName(): String {
if (mName == null) {
mName = ""
}
return mName!!
}
fun getStatus(): String {
if (mStatus == null) {
mStatus = ""
}
return mStatus!!
}
fun getSpecies(): String {
if (mSpecies == null) {
mSpecies = ""
}
return mSpecies!!
}
fun getGender(): String {
if (mGender == null) {
mGender = ""
}
return mGender!!
}
fun getImageUrl(): String {
if (mImageUrl == null) {
mImageUrl = ""
}
return mImageUrl!!
}
companion object {
@SuppressLint("ParcelCreator")
val CREATOR: Parcelable.Creator<ResultBean> = object : Parcelable.Creator<ResultBean> {
override fun createFromParcel(parcel: Parcel): ResultBean {
return ResultBean(parcel)
}
override fun newArray(size: Int): Array<ResultBean?> {
return arrayOfNulls(size)
}
}
}
}
谢谢您的帮助
我不知道为什么,但是我只需在Val Creator上方添加" @jvmfield"
您编写的语法有问题,而JVM无法将其识别为CREATOR
的CC_1。而不是这个:
companion object {
@SuppressLint("ParcelCreator")
val CREATOR: Parcelable.Creator<ResultBean> = object : Parcelable.Creator<ResultBean> {
override fun createFromParcel(parcel: Parcel): ResultBean {
return ResultBean(parcel)
}
override fun newArray(size: Int): Array<ResultBean?> {
return arrayOfNulls(size)
}
}
}
使用此语法:
companion object CREATOR : Parcelable.Creator<SavedState> {
override fun createFromParcel(parcel: Parcel): ResultBean {
return ResultBean(parcel)
}
override fun newArray(size: Int): Array<ResultBean?> {
return arrayOfNulls(size)
}
}
问题在于写作或阅读包裹。要解决该问题,删除了所有实现或覆盖方法,然后再次使用适当的实施覆盖该方法。您只需要按Alt Enter即可覆盖方法。