android - X 类不是抽象的,也没有实现 android.os.Parcelable 中定义的 fun writeToParcel()

标签 android parcelable kotlin-android-extensions android-bundle kotlinx.serialization

在我的 Android 应用程序中,我想向我的 Intent 添加一个包含 Place 对象的 Bundle,如下所述。由于 serializable 速度慢且不推荐,我更喜欢 Parcelable。

虽然我使用 Kotlin 1.3.31,但我在分割某些数据类时遇到了问题。示例:

import android.os.Parcelable
import kotlinx.android.parcel.Parcelize

@Parcelize
data class Place(val street: String, val postal: String, val city: String) : Parcelable

Android Studio 提示:

Class 'Place' is not abstract and does not implement abstract member public abstract fun writeToParcel(p0: Parcel!, p1: Int): Unit defined in android.os.Parcelable

根据一些教程

That’s it! You don’t need to write any parcel methods anymore!

https://android.jlelse.eu/yet-another-awesome-kotlin-feature-parcelize-5439718ba220

我不想用

androidExtensions {
    experimental = true
}

在生产方面。

我在这里有什么选择?

最佳答案

2019 年 11 月 19 日更新

稳定发布后Kotlin 1.3.60及其相应的 Android Studio 插件问题不再存在。 Let's celebrate

2019 年 8 月 27 日更新

在使用全新的 Kotlin 1.3.50 进行更多研究和测试之后,似乎这个问题最终会在他们发布 Kotlin 1.3.60 时得到彻底解决> as per this YouTrack issue

编辑 2019 年 6 月 19 日

随着 Kotlin 1.3.40 的发布,@Parcelize 注释已经过实验并且工作得很好。唯一的问题是报告 issue这使得 IDE 变红,把它放在一边,代码确实可以完美地编译和运行。

Sample code

Sample code

Sample code

我也用这种对象进行了测试,它也确实有效:

enter image description here

旧答案

我面临着完全相同的问题,在调查时我发现了这一点:

Jake Wharton on parcelize

因此,从 Kotlin 1.3.40 开始,@Parcelize 注释看起来将完全稳定。在那之前,您必须设置 experimental 标志。 (悲伤地)


他们错误地将 @Parcelize 推到实验性功能之外,您仍然会遇到编译错误。

关于android - X 类不是抽象的,也没有实现 android.os.Parcelable 中定义的 fun writeToParcel(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56018761/

相关文章:

android - 使用 Parcelable 时 Kotlin 编译错误

android - 打包包含带有自定义对象的集合的模型

没有花括号的 Kotlin 类

android - kotlin 发送带有附件的电子邮件失败并显示 URI

android - 使用通知导航到带有 navArgs 的 fragment

android - 你可以使用 Android 作为 NFC 标签吗

android - 从桌面开发的角度理解 Android 概念

android - 如何将旋转的布局右对齐并匹配父级高度?

java - Android 中字符串数字转换为逗号分隔的字符串数字

kotlin - 如何在 Parcelable 中创建可为 null 的 bool 值