Con il rilascio di Kotlin RC, ho iniziato a scrivere un'app per apprenderla, ma non riesco a capire come ottenere Parcelable
per funzionare.Android Parcelable in Kotlin: CREATOR non trovato nella classe di dati Parcelable
la classe di dati:
data class Project (val reponame:String,
val username:String,
val language:String,
val vcsUrl:String,
val branches:Map<String, Branch>) : Parcelable {
companion object {
val CREATOR = object : Parcelable.Creator<Project> {
override fun createFromParcel(`in`: Parcel): Project {
return Project(`in`)
}
override fun newArray(size: Int): Array<Project?> {
return arrayOfNulls(size)
}
}
}
protected constructor(parcelIn: Parcel) : this (
parcelIn.readString(),
parcelIn.readString(),
parcelIn.readString(),
parcelIn.readString(),
mapOf<String, Branch>().apply {
parcelIn.readMap(this, Branch::class.java.classLoader)
}
)
override fun describeContents(): Int {
throw UnsupportedOperationException()
}
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeString(reponame)
dest.writeString(username)
dest.writeString(language)
dest.writeString(vcsUrl)
dest.writeMap(branches)
}
}
leggendo:
class ProjectDetailActivity : BaseActivity() {
lateinit var project: Project
companion object {
const val EXTRA_PROJECT = "extra_project"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
project = intent.extras.getParcelable(EXTRA_PROJECT)
tvTitle.text = project.reponame
}
}
L'eccezione:
Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.eggman.circleciandroid.model.Project
at android.os.Parcel.readParcelableCreator(Parcel.java:2415)
at android.os.Parcel.readParcelable(Parcel.java:2337)
at android.os.Parcel.readValue(Parcel.java:2243)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2592)
at android.os.BaseBundle.unparcel(BaseBundle.java:221)
at android.os.BaseBundle.get(BaseBundle.java:281)
at com.eggman.circleciandroid.ui.ProjectDetailActivity.onCreate(ProjectDetailActivity.kt:22)
Sono sicuro che è qualcosa di semplice che mi manca, ha chiunque altro ha avuto successo con Parcelable sull'ultimo Kotlin?
Kotlin Versione: 1.0.0-rc-1036
Kotlin Plugin Versione: 1.0.0-rc-1036-IJ143-4
Codice è visualizzabile @https://github.com/eggman87/circle-kotlin
in questo caso il problema sembra essere nel modo in cui si stanno ottenendo * EXTRA_PROJECT *, chiama semplicemente intent.extras.get (EXTRA_PROJECT) ma il problema non è nella definizione Parcelable, non è necessario aggiungerlo. – Juancho
@juancho, sono d'accordo sul fatto che, eventualmente, un altro modo di lavorare con 'Parcelable' non causerebbe il problema in OP (e non riuscivo nemmeno a riprodurlo). Ma l'eccezione è sicuramente lanciata a causa del campo statico mancante, e la risposta lo risolve. Ecco perché ho deciso di eliminarlo. Potresti riprodurre il problema e verificare se questo lo risolve? Se lo fa, penso, sarebbe una risposta migliore. – hotkey
Clonato e collaudo il progetto e sì è relativo a questa JvmField. Sono un po 'confuso perché non sto affrontando lo stesso problema nel mio progetto. Inoltre ho provato a ottenere lo stesso errore nel mio progetto ma niente. Cancellerò i miei commenti solo per evitare confusioni. Grazie :) ! – Juancho