美文网首页
Kotlin使用parcelable出现:BadParcelab

Kotlin使用parcelable出现:BadParcelab

作者: 小和尚恋红尘 | 来源:发表于2017-07-14 17:35 被阅读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)
                }
    
            }
    

    在运行程序,传值成功

    相关文章

      网友评论

          本文标题:Kotlin使用parcelable出现:BadParcelab

          本文链接:https://www.haomeiwen.com/subject/fuqghxtx.html