Sobes.tech
Junior — Middle

Jak se provádí serializace a deserializace objektů pomocí Parcelable v Androidu?

sobes.tech AI

Odpověď od AI

V Androidu se rozhraní Parcelable používá k efektivní serializaci objektů, aby je bylo možné přenášet mezi komponentami (například mezi Activity přes Intent).

Serializace (zápis objektu):

  • Třída musí implementovat rozhraní Parcelable.
  • Přepsat metodu writeToParcel(Parcel dest, int flags), kde zapíšete všechna pole objektu do Parcel pomocí metod jako writeInt(), writeString() atd.

Deserializace (čtení objektu):

  • Vytvořit statické pole CREATOR typu Parcelable.Creator<T>, které implementuje metody:
    • createFromParcel(Parcel in) — čte data z Parcel a vytváří objekt.
    • newArray(int size) — vytváří pole objektů.
  • V konstruktoru, který přijímá Parcel, přečíst pole ve stejném pořadí, v jakém byla zapsána.

Příklad:

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)
    }
}

Tímto způsobem lze objekt přenést přes Intent:

intent.putExtra("user", user)

a načíst:

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