Android.os.BadParcelableException: для протокола Parcelable требуется объект Parcelable.Creator с именем CREATOR

Я попытался передать Extra другому действию, используя намерение.putExtra("result", 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"))  
    }

Фасоль:

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)
            }
        }
    }
}

Спасибо за помощь

1
0
687
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я не знаю почему, но мне нужно просто добавить "@JvmField" выше val CREATOR.

Проблема в написании или чтении посылки. Чтобы решить эту проблему, удалите все реализации или переопределенные методы посылки, а затем снова переопределите метод с правильной реализацией. Вам просто нужно нажать Alt + Enter, чтобы переопределить методы.

Синтаксис, который вы написали, имеет проблему, и JVM не может распознать его как CREATOR для Parcelable. Вместо этого:

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)
            }
        }

Другие вопросы по теме