android.os.badparcelableException:包裹协议需要一个包裹可的creator对象,称为创建



我尝试通过使用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即可覆盖方法。

最新更新