Sobes.tech
Junior — Middle

Ako sa vykonáva serializácia a deserializácia objektov pomocou Parcelable v Android?

sobes.tech AI

Odpoveď od AI

V Androide sa rozhraním Parcelable sa efektívne serializujú objekty, aby ich bolo možné prenášať medzi komponentmi (napríklad medzi Activity pomocou Intent).

Serializácia (zápis objektu):

  • Trieda musí implementovať rozhranie Parcelable.
  • Prepisovať metódu writeToParcel(Parcel dest, int flags), kde zapíšete všetky polia objektu do Parcel pomocou metód ako writeInt(), writeString() a pod.

Deserializácia (čítanie objektu):

  • Vytvoriť statické pole CREATOR typu Parcelable.Creator<T>, ktoré implementuje metódy:
    • createFromParcel(Parcel in) — číta údaje z Parcel a vytvára objekt.
    • newArray(int size) — vytvára pole objektov.
  • V konštruktore, ktorý prijíma Parcel, čítať polia v rovnakom poradí, v akom boli zapísané.

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

Takto je možné objekt preniesť cez Intent:

intent.putExtra("user", user)

a načítať:

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