Sobes.tech
Junior — Middle

Как се извършва сериализацията и десериализацията на обекти с помощта на Parcelable в Android?

sobes.tech AI

Отговор от AI

В Android интерфейсът Parcelable се използва за ефективна сериализация на обекти, за да могат да бъдат прехвърляни между компоненти (например, между Activity чрез Intent).

Сериализация (запис на обекта):

  • Класът трябва да реализира интерфейса Parcelable.
  • Презапишете метода writeToParcel(Parcel dest, int flags), където записвате всички полета на обекта в Parcel с помощта на методи като 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")