gpt4 book ai didi

Kotlin 中的 Android Parcelable : CREATOR not found on Parcelable data class

转载 作者:IT老高 更新时间:2023-10-28 13:32:07 25 4
gpt4 key购买 nike

随着 Kotlin 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
}
}

异常(exception):

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

代码可见@https://github.com/eggman87/circle-kotlin

最佳答案

Kotlin RC 删除了之前已弃用的所有伴随对象属性的静态字段生成(在 this answer 中了解更多信息)。

现在只有 constlateinit@JvmField 标记的会生成静态字段。

您需要通过 @JvmField 注释对 val CREATOR 进行注释,因为 Android 框架需要在您的类中使用静态字段 CREATOR

关于Kotlin 中的 Android Parcelable : CREATOR not found on Parcelable data class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35250041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com