2017-09-07 1 views
7

Parcel zu verwenden, hatte ich diese Version von Kotlin 1.1.4 folgt: https://blog.jetbrains.com/kotlin/2017/08/kotlin-1-1-4-is-out/Android Kotlin erstellen Klasse implementieren Parcel einen Fehler geben in ‚Override‘ von writeToParcel Methode

diese Zeile hinzufügen in Projekt

androidExtensions { 
    experimental = true 
} 

definieren dann eine Klasse:

@Parcelize 
class User(val firstName: String, val lastName: String) : Parcelable 

Die writeToParcel() und createFromParcel() Methoden automatisch

geschaffen
override fun writeToParcel(parcel: Parcel, flags: Int) { 
... 
} 

aber noch haben einen Fehler in 'Überschreibung' Keyword mit Meldung

OVERRIDING_WRITE_TO_PARCEL_IS_NOT_ALLOWED: Übergeordnete 'writeToParcel' ist nicht erlaubt. Verwenden Sie stattdessen 'Parceler'-Begleitobjekt

Können Sie mir den richtigen Weg zeigen?

Bearbeiten: Werden nur im Standardkonstruktor definierte Eigenschaften zu Parcel hinzugefügt, und andere nicht? Ich sehe diese Warnung in dieser Klasse.

PROPERTY_WONT_BE_SERIALIZED: Eigenschaft würde nicht in eine 'Parcel' serialisiert werden. Add '@Transient' Annotation die Warnung

Antwort

3

Stellen Sie sicher, Sie verwenden die Kotlin 1.1.4 Version

Keine Notwendigkeit, entfernen Sie die writeToParcel/createFromParcel Methoden außer Kraft zu setzen. Es sei denn, Sie tun bestimmte Dinge. Das Studio gibt Ihnen einen Fehler, aber Sie können diesen Fehler ignorieren; Die Flussprüfung wurde noch nicht aktualisiert, um @Parcelize zu verstehen. Die entsprechende YouTrack Frage ist hier:

https://youtrack.jetbrains.com/issue/KT-19300

Klasse Dann ist es es zu passieren

enter image description here

erstellen zu verwenden wie

enter image description here

Um

zurück

enter image description here

+0

Wenn ich ein Kind Klasse definieren, die Parcel Klasse erben. Muss ich die Annotation von Parcelize hinzufügen? – quangkid

+0

Ich habe das nie versucht, aber wenn Sie die Kindklasse serialisieren möchten, verwenden Sie Parcelize in der Kindklasse anstelle der Basisklasse.und wenn Sie die Kindklasse nicht serialisieren, brauchen Sie Parcelize nicht. Was möchten Sie erreichen? –

4

Sie können die Warnung einfach ignorieren, da nur ein Flusencheck durchgeführt wird.
für jetzt bekommen nur @SuppressLint("ParcelCreator")

ex verwenden es los:

@SuppressLint("ParcelCreator") 
@Parcelize 
class User(val firstName: String, val lastName: String) : Parcelable 
Verwandte Themen