Sobes.tech
Junior — Middle

Hoe wordt de serialisatie en deserialisatie van objecten uitgevoerd met Parcelable in Android?

sobes.tech AI

Antwoord van AI

In Android wordt de Parcelable-interface gebruikt voor efficiënte serialisatie van objecten, zodat ze tussen componenten kunnen worden overgedragen (bijvoorbeeld tussen Activity via Intent).

Serialisatie (object schrijven):

  • De klasse moet de interface Parcelable implementeren.
  • Overschrijf de methode writeToParcel(Parcel dest, int flags), waarin alle velden van het object worden geschreven naar de Parcel met behulp van methoden zoals writeInt(), writeString(), enz.

Deserialisatie (object lezen):

  • Maak een statisch veld CREATOR van het type Parcelable.Creator<T>, dat de methoden implementeert:
    • createFromParcel(Parcel in) — leest de gegevens uit de Parcel en maakt het object aan.
    • newArray(int size) — maakt een array van objecten.
  • In de constructor die een Parcel ontvangt, lees je de velden in dezelfde volgorde als ze zijn geschreven.

Voorbeeld:

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

Zo kan het object via een Intent worden overgedragen:

intent.putExtra("user", user)

en worden opgehaald met:

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