Android序列化实现接口Serializable与Parcelable详解
一、Serializable(对象)
只需要实现Serializable 接口即可。将一个对象序列化转换成可存储或传输的状态,然后再强转回来使用(反序列化)。
class Person : Serializable {
var name = ""
var age = 0
}
//传递
OneActivity {
val person = Person().apply {
name = "张三"
age = 18
}
Intent(this, TwoActivity::class.java).also {
it.putExtra("person", person)
startActivity(it)
}
}
//获取
TwoActivity {
val person = intent.getSerializableExtra("person") as Person //反序列化成对象
}二、Parcelable(属性)
将一个对象进行分解,分解后的每一个属性都是Intent 所支持的数据类型。
2.1 实现方式(不推荐)
创建一个类实现 Parcelable 接口,定义好属性,按 ctrl+1 编译器会自动帮我们生成。
- 实现 Parcelable 接口,重写 describeContents() 和 writeToParcel() 两个函数。describeContents() 直接返回 0 就行。writeToParcel() 调用 writeXXX() 将类中属性一一写入。
- 创建一个名为 CREATOR 的伴生对象实现 Parcelable.Creator 接口,将泛型类型指定为<Person>,重写 createFromParcel() 和 newArray() 两个函数。createFromParcel()中创建一个 Person 对象返回,并调用 readXXX() 将之前写入的属性一一读出(注意读写的顺序要一致)。newArray()中调用 arrayOfNulls() 传入形参 size 作为数组大小即可。
class Person() : Parcelable {
var name = ""
var age = 0
constructor(parcel: Parcel) : this() {
//读出
name = parcel.readString() ?: ""
age = parcel.readInt()
}
//写入
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(name)
parcel.writeInt(age)
}
//返回0就行
override fun describeContents(): Int {
return 0
}
//伴生对象实现接口
companion object CREATOR : Parcelable.Creator<Person> {
//返回对象
override fun createFromParcel(parcel: Parcel): Person {
return Person(parcel)
}
//返回一个数组,形参 size 作为数组大小
override fun newArray(size: Int): Array<Person?> {
return arrayOfNulls(size)
}
}
}
//传递方式和 Serializable 一样,使用如下:
TwoActivity {
val person = intent.getParcelableExtra("person")
}2.2 注解方式(推荐)
Kotlin提供了更简便的写法,传递的属性都需要定义在主构造中。
//Module Gradle 引入插件
plugins {
id 'kotlin-parcelize'
}
//使用
@Parcelize
class Person(val name: String, var age: Int) : Parcelable到此这篇关于Android序列化实现接口Serializable与Parcelable详解的文章就介绍到这了,更多相关Android Serializable与Parcelable内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Flutter-AnimatedWidget组件源码示例解析
这篇文章主要为大家介绍了Flutter-AnimatedWidget组件源码示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-06-06
详解Retrofit Interceptor(拦截器) 拦截请求并做相关处理
本篇文章主要介绍了详解Retrofit Interceptor(拦截器) 拦截请求并做相关处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-04-04
Android序列化之Parcelable和Serializable的使用详解
本篇文章主要介绍了Android序列化之Parcelable和Serializable的使用详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-01-01


最新评论