Sobes.tech
Junior — Middle

Kuidas toimub objektide serialiseerimine ja deserialiseerimine Parcelable abil Androidis?

sobes.tech AI

Vastus AI-lt

Androidis kasutatakse Parcelable liidest objekti tõhusaks serialiseerimiseks, võimaldades nende edastamist komponentide vahel (näiteks Activity vahel Intent'i kaudu).

Serialiseerimine (objekti kirjutamine):

  • Klass peab implementeerima Parcelable liidest.
  • Ümberkirjutada meetod writeToParcel(Parcel dest, int flags), kus kirjutatakse kõik objekti väljad Parcel'i, kasutades meetodeid nagu writeInt(), writeString() jne.

Deserialiseerimine (objekti lugemine):

  • Luua staatiline väli CREATOR tüüpi Parcelable.Creator<T>, mis implementeerib järgmised meetodid:
    • createFromParcel(Parcel in) — loeb andmed Parcel'ist ja loob objekti.
    • newArray(int size) — loob objekti massiivi.
  • Konstruktoris, mis võtab vastu Parcel, loe väljad samas järjekorras, nagu need olid kirjutatud.

Näide:

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

Seega, objekt võib olla edastatud Intent'i kaudu:

intent.putExtra("user", user)

ning seda saab kätte:

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