網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Android序列化實(shí)現(xiàn)接口Serializable與Parcelable詳解_Android
作者:懶到死的程序員 ? 更新時(shí)間: 2023-01-03 編程語(yǔ)言一、Serializable(對(duì)象)
只需要實(shí)現(xiàn)Serializable 接口即可。將一個(gè)對(duì)象序列化轉(zhuǎn)換成可存儲(chǔ)或傳輸?shù)臓顟B(tài),然后再?gòu)?qiáng)轉(zhuǎn)回來(lái)使用(反序列化)。
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 //反序列化成對(duì)象
}
二、Parcelable(屬性)
將一個(gè)對(duì)象進(jìn)行分解,分解后的每一個(gè)屬性都是Intent 所支持的數(shù)據(jù)類型。
2.1 實(shí)現(xiàn)方式(不推薦)
創(chuàng)建一個(gè)類實(shí)現(xiàn) Parcelable 接口,定義好屬性,按 ctrl+1 編譯器會(huì)自動(dòng)幫我們生成。
- 實(shí)現(xiàn) Parcelable 接口,重寫 describeContents() 和 writeToParcel() 兩個(gè)函數(shù)。describeContents() 直接返回 0 就行。writeToParcel() 調(diào)用 writeXXX() 將類中屬性一一寫入。
- 創(chuàng)建一個(gè)名為 CREATOR 的伴生對(duì)象實(shí)現(xiàn) Parcelable.Creator 接口,將泛型類型指定為<Person>,重寫 createFromParcel() 和 newArray() 兩個(gè)函數(shù)。createFromParcel()中創(chuàng)建一個(gè) Person 對(duì)象返回,并調(diào)用 readXXX() 將之前寫入的屬性一一讀出(注意讀寫的順序要一致)。newArray()中調(diào)用 arrayOfNulls() 傳入形參 size 作為數(shù)組大小即可。
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
}
//伴生對(duì)象實(shí)現(xiàn)接口
companion object CREATOR : Parcelable.Creator<Person> {
//返回對(duì)象
override fun createFromParcel(parcel: Parcel): Person {
return Person(parcel)
}
//返回一個(gè)數(shù)組,形參 size 作為數(shù)組大小
override fun newArray(size: Int): Array<Person?> {
return arrayOfNulls(size)
}
}
}
//傳遞方式和 Serializable 一樣,使用如下:
TwoActivity {
val person = intent.getParcelableExtra("person")
}
2.2 注解方式(推薦)
Kotlin提供了更簡(jiǎn)便的寫法,傳遞的屬性都需要定義在主構(gòu)造中。
//Module Gradle 引入插件
plugins {
id 'kotlin-parcelize'
}
//使用
@Parcelize
class Person(val name: String, var age: Int) : Parcelable
原文鏈接:https://blog.csdn.net/HugMua/article/details/127876903
相關(guān)推薦
- 2022-10-16 python?os.path模塊使用方法介紹_python
- 2022-10-26 jQuery?基礎(chǔ)選擇器與屬性選擇器_jquery
- 2022-08-22 C++動(dòng)態(tài)規(guī)劃實(shí)現(xiàn)查找最長(zhǎng)公共子序列_C 語(yǔ)言
- 2022-08-27 C#8.0中的模式匹配_C#教程
- 2022-09-17 python中pandas常用命令詳解_python
- 2022-08-25 C++示例講解vector容器_C 語(yǔ)言
- 2022-02-11 Command line is too long. Shorten command line for
- 2022-05-13 Android水波紋效果
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支