Kotlin使用parcelable出现:BadParcelableException: Parcelable protocol requires a Parcelable.Creator...

在Kotlin编写代码过程中,需要用到parcelable来进行传值,按照以前的写法,进行序列化:

class PayTypeInfo : Parcelable{
    var payMethodId: String? = null//支付方式ID
    var payMethodName: String? = null//支付方式名称

    override fun writeToParcel(dest: Parcel, flags: Int) {
        dest.writeString(payMethodId)
        dest.writeString(payMethodName)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object {

        val CREATOR: Parcelable.Creator<PayTypeInfo> = object : Parcelable.Creator<PayTypeInfo> {

            override fun createFromParcel(source: Parcel): PayTypeInfo {
                val payTypeInfo = PayTypeInfo()
                payTypeInfo.payMethodId = source.readString()
                payTypeInfo.payMethodName = source.readString()
                return payTypeInfo
            }

            override fun newArray(size: Int): Array<PayTypeInfo> {
                return newArray(size)
            }

        }
    }
}

这样序列化的实体类就写完了,然后进行传值

val bundle = Bundle()
val typeList = ArrayList<PayTypeInfo>()
bundle.putParcelableArrayList("payType", typeList)

接受数据时:

  val bundle = intent.extras
 val payTypeList = bundle.getParcelableArrayList<PayTypeInfo>("payType")

运行程序,出现错误,错误代码为:BadParcelableException: Parcelable protocol requires a Parcelable.Creator...

经过查找资料,找到了解决办法,只需要在代码CREATOR前面添加@JvmField即可:

@JvmField val CREATOR: Parcelable.Creator<PayTypeInfo> = object : Parcelable.Creator<PayTypeInfo> {

            override fun createFromParcel(source: Parcel): PayTypeInfo {
                val payTypeInfo = PayTypeInfo()
                payTypeInfo.payMethodId = source.readString()
                payTypeInfo.payMethodName = source.readString()
                return payTypeInfo
            }

            override fun newArray(size: Int): Array<PayTypeInfo> {
                return newArray(size)
            }

        }

在运行程序,传值成功

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容