X类不是抽象的,并且没有实现android.os.Parcelable中定义的有趣的writeToParcel()

Noa*_*ein 9 android parcelable android-bundle kotlin-android-extensions kotlinx.serialisation

在我的Android应用中,我想Place向我的Intent 添加一个Bundle,其中包括如下所述的对象。由于可序列化很慢并且不建议使用,因此我更喜欢使用Parcelable。

Althoug我使用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
Run Code Online (Sandbox Code Playgroud)

和Android Studio抱怨:

类'Place'不是抽象的,并且没有实现抽象成员public abstract fun writeToParcel(p0:Parcel !, p1:Int):android.os.Parcelable中定义的单位

根据一些教程

而已!您不再需要编写任何包裹方法!

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

而且我不想使用

androidExtensions {
    experimental = true
}
Run Code Online (Sandbox Code Playgroud)

生产中的东西。

我在这里有什么选择?

Som*_*boy 18

更新19/11/2019

Kotlin 1.3.60及其对应的Android Studio插件的稳定版本发布之后,此问题不再存在。 庆祝

更新27/08/2019

经过对新品牌进行更多的研究和测试之后,Kotlin 1.3.50当它们按照此YouTrack问题发布时,似乎终于可以完全解决Kotlin 1.3.60 该问题了。

编辑19/06/2019

在Kotlin 1.3.40版本中,该@Parcelize注释已超出实验范围,可以很好地工作。唯一的问题是已报告的问题,该问题使IDE变红,从而使代码无法编译并完美运行。

样例代码

样例代码

样例代码

我还测试了这种对象,它也可以工作:

在此处输入图片说明

旧答案

我正面临着完全相同的问题,在调查时发现:

杰克·沃顿(Jake Wharton)包裹

因此,@Parcelize从开始,注释的外观将完全稳定Kotlin 1.3.40。在此之前,您将必须设置experimental标志。(可悲)


他们错误地@Parcelize超出了实验性功能,您仍然会遇到编译错误。