Sobes.tech
Junior — Middle

Wie erfolgt die Serialisierung und Deserialisierung von Objekten mit Parcelable in Android?

sobes.tech KI

Antwort von AI

In Android wird die Schnittstelle Parcelable verwendet, um Objekte effizient zu serialisieren, damit sie zwischen Komponenten übertragen werden können (z.B. zwischen Activity via Intent).

Serialisierung (Schreiben des Objekts):

  • Die Klasse muss die Schnittstelle Parcelable implementieren.
  • Überschreiben Sie die Methode writeToParcel(Parcel dest, int flags), in der alle Felder des Objekts in den Parcel geschrieben werden, z.B. mit writeInt(), writeString() usw.

Deserialisierung (Lesen des Objekts):

  • Erstellen Sie ein statisches Feld CREATOR vom Typ Parcelable.Creator<T>, das die Methoden:
    • createFromParcel(Parcel in) — liest die Daten aus dem Parcel und erstellt das Objekt.
    • newArray(int size) — erstellt ein Array von Objekten.
  • Im Konstruktor, der einen Parcel entgegennimmt, lesen Sie die Felder in der gleichen Reihenfolge, in der sie geschrieben wurden.

Beispiel:

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

Auf diese Weise kann das Objekt über einen Intent übertragen werden:

intent.putExtra("user", user)

und abgerufen werden mit:

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