【问题标题】:Kotlin parcelize issue with gsonKotlin parcelize 与 gson 的问题
【发布时间】:2017-11-21 04:41:10
【问题描述】:

我正在为 gson 使用@parcelize

这是我的课

@Parcelize
data class CommunityModel(@SerializedName("post") val post: PostModel,
                                   @SerializedName("is_liked") val isLiked: Boolean,
                                   @SerializedName("post_like") val postLike: QuestionModel,
                                   @SerializedName("polling_options") val pollingOptions: List<PollingModel>,
                                   @SerializedName("post_polled") val postPolled: Boolean) : Parcelable

我收到错误Unable to invoke no-args constructor for class. Register an InstanceCreator with Gson for this type may fix this problem.

但此错误仅出现在较旧的 android 版本(低于 5.0)

我尝试实现默认构造函数:

constructor: this(PostModel(), true, QuestionModel(), emptyList(), true)

但它却给了我java.lang.VerifyError

我正在使用带有rxjava2和gson转换器版本2.3

的retrofit2

我的 kotlin 版本是 1.1.51

这是已知的错误吗?还是我做错了什么?

【问题讨论】:

    标签: kotlin gson parcelable json-deserialization


    【解决方案1】:

    无参数编译器插件

    无参数编译器插件为具有特定注释的类生成一个额外的零参数构造函数。

    生成的构造函数是合成的,因此不能直接从 Java 或 Kotlin 调用,但可以使用反射调用。

    这允许 Java Persistence API (JPA) 实例化数据类,尽管从 Kotlin 或 Java 的角度来看它没有零参数构造函数(请参阅下面的 kotlin-jpa 插件描述)。

    在 Gradle 中使用

    用法和全开差不多。

    添加插件并指定必须导致为带注释的类生成无参数构造函数的注释列表。

    buildscript {
        dependencies {
            classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
        }
    }
    
    apply plugin: "kotlin-noarg"
    

    来源https://kotlinlang.org/docs/reference/compiler-plugins.html

    【讨论】:

    • 你能给我举例说明如何使用它吗?我试过上面的链接,还是不行。
    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2021-12-26
    • 2017-10-21
    相关资源
    最近更新 更多