android.os.BadParcelableException: для протокола Parcelable требуется объект Parcelable.Creator с именем CREATOR - PullRequest
0 голосов
/ 18 февраля 2019

Я пытался передать Extra в другое действие с помощью intent.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, но это ничего не изменило.

здесь мой следующий код:

Activity:

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

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

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

0 голосов
/ 19 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...