Sobes.tech
Junior — Middle

Чӣ гуна сериалӣ ва десериалӣ кардани объектҳо бо истифода аз Parcelable дар Android анҷом дода мешавад?

sobes.tech AI

Ҷавоб аз AI

Дар Android, интерфейси Parcelable истифода мешавад барои сериализатсияи самараноки объектҳо, то ки онҳоро байни компонентҳо (масалан, байни Activity тавассути Intent) интиқол додан мумкин бошад.

Сериализация (навиштани объект):

  • Класс бояд интерфейси Parcelable-ро амалӣ кунад.
  • Методи writeToParcel(Parcel dest, int flags)-ро ислоҳ кунед, ки дар он ҳамаи майдонҳои объект бо истифода аз методҳои writeInt(), writeString() ва ғайра навишта мешаванд.

Десериализация (хониши объект):

  • Майдони статикӣ CREATOR-ро бо тип Parcelable.Creator<T> созед, ки ин методҳоро иҷро мекунад:
    • createFromParcel(Parcel in) — маълумотро аз Parcel мехонад ва объектро месозад.
    • newArray(int size) — массиви объектҳоро месозад.
  • Дар конструктор, ки Parcel-ро мегирад, майдонҳоро дар ҳамон тартиб, ки навишта шудаанд, хонед.

Масалан:

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

Интихобан, объект метавонад тавассути Intent интиқол дода шавад:

intent.putExtra("user", user)

ва гирифта шавад:

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