コトルリンRCのリリースで、私はそれを学ぶためにアプリを書いて始めましたが、Parcelable
を取得する方法を見つけることができません。アンドロイドパーセルケットリンで:作成者がパーセルブルデータクラスに見つかりません
データクラス:
それを読む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)
}
}
:
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
}
}
例外:
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)
私はそれが私が行方不明です単純なものであると確信している、誰が持っていました最新のKotlinでParcelableの成功?
Kotlinバージョン:1.0.0-RC-1036
Kotlinプラグインのバージョン:1.0.0-RC-1036-IJ143-4
コードがKotlin RCは、以前に落としhttps://github.com/eggman87/circle-kotlin
をこの場合の問題は、あなたが得ている方法であると思われます* EXTRA_PROJECT *は、intent.extras.get(EXTRA_PROJECT)を呼び出すだけで問題はParcelable定義にないので、これを追加する必要はありません。 – Juancho
@juancho、私は、おそらく、Parcelableで作業するいくつかの他の方法がOPの問題を引き起こさないことに同意します(そして私はそれを再現できませんでした)。しかし、静的フィールドがないために例外がスローされ、その答えによって解決されます。だから私はそれを元に戻すことにしました。問題を再現し、これが解決するかどうか確認してください。そうすれば、より良い答えになると思います。 – hotkey
私はプロジェクトをクローンしてテストしています。はい、このJvmFieldに関するものです。私は私のプロジェクトで同じ問題に直面していない理由を少し混乱させます。また、プロジェクトで同じエラーが発生しましたが、何もしませんでした。私はただの混乱を避けるために私のコメントを削除します。ありがとう:)! – Juancho