Android序列化實(shí)現(xiàn)接口Serializable與Parcelable詳解
一、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 接口,重寫(xiě) describeContents() 和 writeToParcel() 兩個(gè)函數(shù)。describeContents() 直接返回 0 就行。writeToParcel() 調(diào)用 writeXXX() 將類中屬性一一寫(xiě)入。
- 創(chuàng)建一個(gè)名為 CREATOR 的伴生對(duì)象實(shí)現(xiàn) Parcelable.Creator 接口,將泛型類型指定為<Person>,重寫(xiě) createFromParcel() 和 newArray() 兩個(gè)函數(shù)。createFromParcel()中創(chuàng)建一個(gè) Person 對(duì)象返回,并調(diào)用 readXXX() 將之前寫(xiě)入的屬性一一讀出(注意讀寫(xiě)的順序要一致)。newArray()中調(diào)用 arrayOfNulls() 傳入形參 size 作為數(shù)組大小即可。
class Person() : Parcelable {
var name = ""
var age = 0
constructor(parcel: Parcel) : this() {
//讀出
name = parcel.readString() ?: ""
age = parcel.readInt()
}
//寫(xiě)入
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)便的寫(xiě)法,傳遞的屬性都需要定義在主構(gòu)造中。
//Module Gradle 引入插件
plugins {
id 'kotlin-parcelize'
}
//使用
@Parcelize
class Person(val name: String, var age: Int) : Parcelable到此這篇關(guān)于Android序列化實(shí)現(xiàn)接口Serializable與Parcelable詳解的文章就介紹到這了,更多相關(guān)Android Serializable與Parcelable內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android ListView適配器(Adapter)優(yōu)化方法詳解
這篇文章主要介紹了Android ListView優(yōu)化方法詳解的相關(guān)資料,這里舉例說(shuō)明該如何對(duì)ListView 進(jìn)行優(yōu)化,具有一定的參考價(jià)值,需要的朋友可以參考下2016-11-11
Android自定義TextView實(shí)現(xiàn)文字傾斜效果
有時(shí)候Android自帶的控件無(wú)法滿足我們的某些要求,這時(shí)就需要我們自定義控件來(lái)實(shí)現(xiàn)這些功能。比如在實(shí)際開(kāi)發(fā)應(yīng)用中,我們有時(shí)需要將TextView的文字傾斜一定的角度,就需要自定義TextView。下面這篇文章就給大家介紹了利用Android TextView如何實(shí)現(xiàn)文字傾斜效果。2016-11-11
總結(jié)安卓(Android)中常用的跳轉(zhuǎn)工具
在大家日常開(kāi)發(fā)的時(shí)候經(jīng)常會(huì)用到各式各樣的跳轉(zhuǎn),如跳轉(zhuǎn)到QQ、微信聊天界面、跳轉(zhuǎn)到聯(lián)系人界面或者跳轉(zhuǎn)到瀏覽器和照相機(jī)等等之類的,本文將常用到的一些跳轉(zhuǎn)集合到一起,這樣更方便大家以后使用,有需要的小伙伴們可以參考借鑒。2016-08-08
Android中點(diǎn)擊事件的四種寫(xiě)法詳解
本篇文章主要介紹了Android中點(diǎn)擊事件的四種寫(xiě)法詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Android studio 切換flutterSDK之后報(bào)錯(cuò)及解決辦法(推薦)
這篇文章主要介紹了Android studio 切換flutterSDK之后報(bào)錯(cuò)及解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
圣誕節(jié),寫(xiě)個(gè)程序練練手————Android 全界面懸浮按鈕實(shí)現(xiàn)
這篇文章主要介紹了圣誕節(jié),寫(xiě)個(gè)程序練練手————Android 全界面懸浮按鈕實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2015-12-12

