Sobes.tech
Junior — Middle

Cum se realizează serializarea și deserializarea obiectelor folosind Parcelable în Android?

sobes.tech AI

Răspuns de la AI

În Android, interfața Parcelable este utilizată pentru serializarea eficientă a obiectelor, pentru a le transfera între componente (de exemplu, între Activity prin Intent).

Serializare (scrierea obiectului):

  • Clasa trebuie să implementeze interfața Parcelable.
  • Suprascrieți metoda writeToParcel(Parcel dest, int flags), unde scrieți toate câmpurile obiectului în Parcel folosind metode precum writeInt(), writeString(), etc.

Deserializare (citirea obiectului):

  • Creați un câmp static CREATOR de tip Parcelable.Creator<T>, care implementează metodele:
    • createFromParcel(Parcel in) — citește datele din Parcel și creează obiectul.
    • newArray(int size) — creează un array de obiecte.
  • În constructorul care primește un Parcel, citiți câmpurile în aceeași ordine în care au fost scrise.

Exemplu:

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

Astfel, obiectul poate fi transmis prin Intent:

intent.putExtra("user", user)

și recuperat cu:

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