Sobes.tech
Junior — Middle

Hogyan történik az objektumok serializálása és deserializálása Parcelable segítségével Androidban?

sobes.tech MI

Válasz az MI-től

Androidben a Parcelable interfész hatékony objektum-szerializációra szolgál, lehetővé téve azok átadását komponensek között (például Activity között Intent segítségével).

Szerializáció (objektum írása):

  • A osztálynak implementálnia kell a Parcelable interfészt.
  • Felül kell írni a writeToParcel(Parcel dest, int flags) metódust, ahol az összes mezőt írjuk a Parcel-ba writeInt(), writeString() stb. segítségével.

Deszerializáció (objektum olvasása):

  • Létre kell hozni egy statikus CREATOR mezőt Parcelable.Creator<T> típusban, amely implementálja a következő metódusokat:
    • createFromParcel(Parcel in) — olvassa az adatokat a Parcel-ból és létrehozza az objektumot.
    • newArray(int size) — létrehoz egy objektum tömböt.
  • A konstruktorban, amely egy Parcel-t kap, olvassa be a mezőket ugyanabban a sorrendben, ahogyan írták.

Példa:

class User(val name: String, val age: Int) : Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.readString() ?: "",
        parcel.readInt()
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(name)
        parcel.writeInt(age)
    }

    override fun describeContents() = 0

    companion object CREATOR : Parcelable.Creator<User> {
        override fun createFromParcel(parcel: Parcel) = User(parcel)
        override fun newArray(size: Int) = arrayOfNulls<User?>(size)
    }
}

Így az objektum átadható Intenttel:

intent.putExtra("user", user)

és elérhető vele:

val user = intent.getParcelableExtra<User>("user")