Sobes.tech
Junior — Middle

Androidda Parcelable yordamida obyektlarni serializatsiya qilish va deserializatsiya qilish qanday amalga oshiriladi?

sobes.tech AI

AIdan javob

Androidda, Parcelable interfeysi obyektlarni samarali seriyalash uchun ishlatiladi va ularni komponentlar o'rtasida (masalan, Activity o'rtasida Intent orqali) o'tkazishga imkon beradi.

Seriyalash (obyektni yozish):

  • Sinf Parcelable interfeysini amalga oshirishi kerak.
  • writeToParcel(Parcel dest, int flags) metodini qayta yozing, bu yerda obyektning barcha maydonlarini writeInt(), writeString() va hokazo metodlar yordamida Parcel ga yozing.

Deseriyalash (obyektni o'qish):

  • Parcelable.Creator<T> turidagi statik CREATOR maydonini yarating, u quyidagi metodlarni amalga oshiradi:
    • createFromParcel(Parcel in)Parcel dan ma'lumotlarni o'qib, obyektni yaratadi.
    • newArray(int size) — obyektlar massivini yaratadi.
  • Parcel ni qabul qiladigan konstruktorida, maydonlarni yozilgan tartibda o'qing.

Misol:

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

Shunday qilib, obyekt Intent orqali o'tkazilishi mumkin:

intent.putExtra("user", user)

va olinishi:

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