猛禽洛的程式筆記庫

[Android] Intent時傳送data class資料

有時候在Intent切換頁面時,如需要傳送較複雜的資料,會習慣包裝在data class中,但是IntentputExtra不能放基本類型以外的型別,那要如何傳送呢?

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-

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *