Kotlin语言下 序列化
选择第一项或者再次按回车,则会自动生成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”,无则加上
网友评论