Sobes.tech
Junior — Middle

Kako se vrši serializacija i deserializacija objekata pomoću Parcelable u Androidu?

sobes.tech АИ

Одговор од АИ

U Androidu, interfejs Parcelable koristi se za efikasnu serijalizaciju objekata, omogućavajući njihovo prenošenje između komponenti (npr. između Activity-ja putem Intent-a).

Serijalizacija (pisanje objekta):

  • Klasa mora implementirati interfejs Parcelable.
  • Prepisati metodu writeToParcel(Parcel dest, int flags), gde se svi atributi objekta upisuju u Parcel pomoću metoda kao što su writeInt(), writeString(), itd.

Deserijalizacija (čitanje objekta):

  • Kreirati statičko polje CREATOR tipa Parcelable.Creator<T>, koje implementira sledeće metode:
    • createFromParcel(Parcel in) — čita podatke iz Parcel i kreira objekat.
    • newArray(int size) — kreira niz objekata.
  • U konstruktoru koji prima Parcel, čitati atribute u istom redosledu u kojem su zapisani.

Primer:

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

Tako, objekat može biti prenesen putem Intent-a:

intent.putExtra("user", user)

i preuzet:

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