Sobes.tech
Junior — Middle

Πώς πραγματοποιείται η σειριοποίηση και η αποσειριοποίηση αντικειμένων με το Parcelable στο Android;

sobes.tech AI

Απάντηση από AI

Στο Android, το interface Parcelable χρησιμοποιείται για αποτελεσματική σειριοποίηση αντικειμένων, ώστε να μπορούν να μεταφερθούν μεταξύ συστατικών (π.χ., μεταξύ Activity μέσω Intent).

Σειριοποίηση (εγγραφή αντικειμένου):

  • Η κλάση πρέπει να υλοποιεί το interface 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")