有時候在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-
發佈留言