有時候在Intent切換頁面時,如需要傳送較複雜的資料,會習慣包裝在data class中,但是Intent的putExtra不能放基本類型以外的型別,那要如何傳送呢?
putExtra中可以傳送序列化(Serializable)的傳遞方式,所以我們可以將data class序列化,這樣就可以進行傳遞了。
如下是把data class序列化後的樣子:
在所有欄位中都加上@SerializedName然後指向變數名稱,最後再繼承Serializable
data class JsonProjectUserInfo (
/** 性別 */
@SerializedName("gender")
var gender: String,
/** 年齡 */
@SerializedName("age")
var age: Int,
/** 身高 */
@SerializedName("height")
var height: Int,
/** 體重 */
@SerializedName("weight")
var weight: Int
): Serializable
注意: 並非所有變數型別都能序列化! 如果遇到不能序列化的種類時,就會跳出錯誤
Parcelable encountered IOException writing serializable object
遇到此類問題的話,就只能換別的方式傳遞囉!
把data class序列化完成後,就可以putExtra進去傳遞了
val i = Intent(this@AActivity, BActivity::class.java)
i.putExtra("mydataclass", jsonProjectUserInfo)
startActivity(i)
到對面時的讀取方式如下:
try{
projectUserInfo = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
intent.getSerializableExtra("mydataclass", JsonProjectUserInfo::class.java)!!
}else{
intent.getSerializableExtra("mydataclass") as JsonProjectUserInfo
}
}catch (e: Exception){
e.printStackTrace()
}
-END-
發佈留言