Sobes.tech
Junior — Middle

Come vengono serializzati e deserializzati gli oggetti usando Parcelable in Android?

sobes.tech AI

Risposta dell'AI

In Android, l'interfaccia Parcelable viene utilizzata per serializzare in modo efficiente gli oggetti, consentendo di trasferirli tra componenti (ad esempio, tra Activity tramite Intent).

Serializzazione (scrittura dell'oggetto):

  • La classe deve implementare l'interfaccia Parcelable.
  • Sovrascrivere il metodo writeToParcel(Parcel dest, int flags), dove si scrivono tutti i campi dell'oggetto nel Parcel usando metodi come writeInt(), writeString(), ecc.

Deserializzazione (lettura dell'oggetto):

  • Creare un campo statico CREATOR di tipo Parcelable.Creator<T>, che implementa i metodi:
    • createFromParcel(Parcel in) — legge i dati dal Parcel e crea l'oggetto.
    • newArray(int size) — crea un array di oggetti.
  • Nel costruttore che riceve un Parcel, leggere i campi nello stesso ordine in cui sono stati scritti.

Esempio:

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

In questo modo, l'oggetto può essere trasferito tramite Intent:

intent.putExtra("user", user)

e recuperato con:

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