Android序列化實現(xiàn)接口Serializable與Parcelable詳解
一、Serializable(對象)
只需要實現(xiàn)Serializable 接口即可。將一個對象序列化轉(zhuǎn)換成可存儲或傳輸?shù)臓顟B(tài),然后再強轉(zhuǎn)回來使用(反序列化)。
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 所支持的數(shù)據(jù)類型。
2.1 實現(xiàn)方式(不推薦)
創(chuàng)建一個類實現(xiàn) Parcelable 接口,定義好屬性,按 ctrl+1 編譯器會自動幫我們生成。
- 實現(xiàn) Parcelable 接口,重寫 describeContents() 和 writeToParcel() 兩個函數(shù)。describeContents() 直接返回 0 就行。writeToParcel() 調(diào)用 writeXXX() 將類中屬性一一寫入。
- 創(chuàng)建一個名為 CREATOR 的伴生對象實現(xiàn) Parcelable.Creator 接口,將泛型類型指定為<Person>,重寫 createFromParcel() 和 newArray() 兩個函數(shù)。createFromParcel()中創(chuàng)建一個 Person 對象返回,并調(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
}
//伴生對象實現(xiàn)接口
companion object CREATOR : Parcelable.Creator<Person> {
//返回對象
override fun createFromParcel(parcel: Parcel): Person {
return Person(parcel)
}
//返回一個數(shù)組,形參 size 作為數(shù)組大小
override fun newArray(size: Int): Array<Person?> {
return arrayOfNulls(size)
}
}
}
//傳遞方式和 Serializable 一樣,使用如下:
TwoActivity {
val person = intent.getParcelableExtra("person")
}2.2 注解方式(推薦)
Kotlin提供了更簡便的寫法,傳遞的屬性都需要定義在主構(gòu)造中。
//Module Gradle 引入插件
plugins {
id 'kotlin-parcelize'
}
//使用
@Parcelize
class Person(val name: String, var age: Int) : Parcelable到此這篇關(guān)于Android序列化實現(xiàn)接口Serializable與Parcelable詳解的文章就介紹到這了,更多相關(guān)Android Serializable與Parcelable內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Flutter-AnimatedWidget組件源碼示例解析
這篇文章主要為大家介紹了Flutter-AnimatedWidget組件源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
Android實現(xiàn)志愿者系統(tǒng)詳細步驟與代碼
這篇文章主要介紹了Android實現(xiàn)志愿者系統(tǒng),本系統(tǒng)采用MVC架構(gòu)設(shè)計,SQLite數(shù)據(jù)表有用戶表、成員表和活動表,有十多個Activity頁面。打開應(yīng)用,進入歡迎界面,3s后跳轉(zhuǎn)登錄界面,用戶先注冊賬號,登錄成功后進入主界面2023-02-02
Android中判斷手機是否聯(lián)網(wǎng)實例
這篇文章主要介紹了Android中判斷手機是否聯(lián)網(wǎng)實例,包括xml配置文件及功能代碼的實現(xiàn),需要的朋友可以參考下2014-10-10
Android控件Spinner實現(xiàn)下拉列表及監(jiān)聽功能
這篇文章主要介紹了Android控件Spinner實現(xiàn)下拉列表及監(jiān)聽功能,這是在Web開發(fā)中一個必不可少的交互性組件,而在Android中的對應(yīng)實現(xiàn)就是Spinner。需要的朋友可以參考下2018-07-07
詳解Retrofit Interceptor(攔截器) 攔截請求并做相關(guān)處理
本篇文章主要介紹了詳解Retrofit Interceptor(攔截器) 攔截請求并做相關(guān)處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
Android序列化之Parcelable和Serializable的使用詳解
本篇文章主要介紹了Android序列化之Parcelable和Serializable的使用詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01

