Sobes.tech
Junior — Middle

Jak odbywa się serializacja i deserializacja obiektów za pomocą Parcelable w Android?

sobes.tech AI

Odpowiedź od AI

W Androidzie, interfejs Parcelable jest używany do efektywnej serializacji obiektów, aby można je było przekazywać między komponentami (np. między Activity za pomocą Intent).

Serializacja (zapis obiektu):

  • Klasa musi implementować interfejs Parcelable.
  • Nadpisać metodę writeToParcel(Parcel dest, int flags), w której zapisuje się wszystkie pola obiektu do Parcel za pomocą metod takich jak writeInt(), writeString() itp.

Deserializacja (odczyt obiektu):

  • Utworzyć statyczne pole CREATOR typu Parcelable.Creator<T>, które implementuje metody:
    • createFromParcel(Parcel in) — odczytuje dane z Parcel i tworzy obiekt.
    • newArray(int size) — tworzy tablicę obiektów.
  • W konstruktorze przyjmującym Parcel odczytać pola w tym samym porządku, w jakim były zapisywane.

Przykład:

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

W ten sposób obiekt można przekazać przez Intent:

intent.putExtra("user", user)

i odczytać:

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