Sobes.tech
Junior — Middle

Kaip vykdoma objektų serializacija ir deserializacija naudojant Parcelable Android?

sobes.tech AI

Atsakymas iš AI

Android'e Parcelable sąsaja naudojama efektyviai objektų serializacijai, leidžiant jiems būti perduodamiems tarp komponentų (pavyzdžiui, tarp Activity per Intent).

Serializacija (objekto įrašymas):

  • Klasė turi įgyvendinti Parcelable sąsają.
  • Perrašyti metodą writeToParcel(Parcel dest, int flags), kuriame įrašomi visi objekto laukai į Parcel naudojant writeInt(), writeString() ir kt.

Deserializacija (objekto skaitymas):

  • Sukurti statinį lauką CREATOR tipo Parcelable.Creator<T>, kuris įgyvendina šiuos metodus:
    • createFromParcel(Parcel in) — skaito duomenis iš Parcel ir sukuria objektą.
    • newArray(int size) — sukuria objektų masyvą.
  • Konstruktoriuose, kurie priima Parcel, skaitykite laukus tokia pačia tvarka, kaip jie buvo įrašyti.

Pavyzdys:

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

Taip, objektas gali būti perduotas per Intent:

intent.putExtra("user", user)

ir gautas:

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