美文网首页
Kotlin Parcelable

Kotlin Parcelable

作者: sexyhair | 来源:发表于2018-11-27 10:54 被阅读0次

    Kotlin语言下 序列化

    AndroidStudio快捷键:option + 回车

    选择第一项或者再次按回车,则会自动生成Parcelable相关内容

    生成后有可能会需要修改

    不需要修改的:

    data class TextMatchTopic(var id: String = "",
                              var topic_en: String = "",
                              var topic_cn: String = "",
                              var topic_sa: String = "",
                              var pid: String = "",
                              var created_at: String = "") : Parcelable {
        constructor(parcel: Parcel) : this(
                parcel.readString(),
                parcel.readString(),
                parcel.readString(),
                parcel.readString(),
                parcel.readString(),
                parcel.readString()) {
        }
    
        override fun writeToParcel(parcel: Parcel, flags: Int) {
            parcel.writeString(id)
            parcel.writeString(topic_en)
            parcel.writeString(topic_cn)
            parcel.writeString(topic_sa)
            parcel.writeString(pid)
            parcel.writeString(created_at)
        }
    
        override fun describeContents(): Int {
            return 0
        }
    
        companion object CREATOR : Parcelable.Creator<TextMatchTopic> {
            override fun createFromParcel(parcel: Parcel): TextMatchTopic {
                return TextMatchTopic(parcel)
            }
    
            override fun newArray(size: Int): Array<TextMatchTopic?> {
                return arrayOfNulls(size)
            }
        }
    }
    

    需要修改的:

    属性中有自定义类集合时:
    data class TextMatchInfoDataBean(val uid: String,
                                     val similar: String = "0",
                                     var topic: List<TextMatchTopic> = arrayListOf()) : Parcelable {
        constructor(parcel: Parcel) : this(
                parcel.readString(),
                parcel.readString(),
                //自动生成时生成的是: parcel.createTypedArrayList(TextMatchTopic))
                //`需要加入.CREATOR` 否则在intent传递数据时会有崩溃
                parcel.createTypedArrayList(TextMatchTopic.CREATOR)) {
        }
    
        override fun writeToParcel(parcel: Parcel, flags: Int) {
            parcel.writeString(uid)
            parcel.writeString(similar)
            parcel.writeTypedList(topic)
        }
    
        override fun describeContents(): Int {
            return 0
        }
    
        companion object CREATOR : Parcelable.Creator<TextMatchInfoDataBean> {
            override fun createFromParcel(parcel: Parcel): TextMatchInfoDataBean {
                return TextMatchInfoDataBean(parcel)
            }
    
            override fun newArray(size: Int): Array<TextMatchInfoDataBean?> {
                return arrayOfNulls(size)
            }
        }
    }
    
    属性中有自定义类时:
    data class TextMatchInfoBean(val data: TextMatchInfoDataBean = TextMatchInfoDataBean("", "", arrayListOf())) : CommonBean(), Parcelable {
        constructor(parcel: Parcel) : this(
                //注意:parcel.readParcelable后是否有<>
                parcel.readParcelable<TextMatchInfoDataBean>(TextMatchInfoDataBean::class.java.classLoader)) {
        }
    
        override fun writeToParcel(parcel: Parcel, flags: Int) {
            parcel.writeParcelable(data, flags)
        }
    
        override fun describeContents(): Int {
            return 0
        }
    
        companion object CREATOR : Parcelable.Creator<TextMatchInfoBean> {
            override fun createFromParcel(parcel: Parcel): TextMatchInfoBean {
                return TextMatchInfoBean(parcel)
            }
    
            override fun newArray(size: Int): Array<TextMatchInfoBean?> {
                return arrayOfNulls(size)
            }
        }
    }
    

    总结:快捷键生成后改动注意点:

    1 - 确认类是否 “:Parcelable”无则加上以实现Parcelable
    2 - 确认writeToParcel(parcel: Parcel, flags: Int)是否有 :
            super.writeToParcel(parcel, flags),有则去掉
    3 - 属性中有类集合时注意构造方法中
            createTypedArrayList(XXX.CREATOR)是否带有“.CREATOR”,无则加上

    相关文章

      网友评论

          本文标题:Kotlin Parcelable

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