Kotlin使用parcelable出现:BadParcelab

2017-07-14  本文已影响0人  小和尚恋红尘

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

        }

在运行程序,传值成功

上一篇下一篇

猜你喜欢

热点阅读