Android会议室:实体和Pojos必须具有可用的公共构造函数Kotli

时间:2019-02-27 22:19:47

标签: android kotlin

实施ROOM时出现此错误Entities and Pojos must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type)。 我试图添加一个空的构造函数,但是我没有用。因此,只有我能避免删除embedded的问题,但如果可能的话,我想找到另一种解决方案。

这是我的实体

 @Entity(tableName = "events")
class Event(
        @ColumnInfo(name = "name")
        @SerializedName("name")
        @Expose
        var name: String,

        @PrimaryKey
        @ColumnInfo(name = "id")
        @SerializedName("id")
        @Expose
        var id: String,

        @Embedded
        var images: List<Image>,

        @Embedded
        var dates: Dates,

        @Embedded
        var venues: Venues,
        var favorite: Boolean
)

2 个答案:

答案 0 :(得分:0)

您可以那样做

@Entity(tableName = "events")
class Event(
        @ColumnInfo(name = "name")
        @SerializedName("name")
        @Expose
        var name: String,

        @PrimaryKey
        @ColumnInfo(name = "id")
        @SerializedName("id")
        @Expose
        var id: String){

        var images: List<Image>? = null
        var dates: Dates? = null
        var venues: Venues? = null
        var favorite: Boolean = false
}

答案 1 :(得分:0)

您需要添加一个默认的构造函数,在Kotlin中看起来像这样(类的主要构造函数已经是第一行;在大多数情况下,关键字constructor会被省略;请参见{ {3}}):

@Entity(tableName = "events")
class Event() {
    ...
}

或显式地,而没有省略constructor关键字:

@Entity(tableName = "events")
class Event constructor() {

}

var favorite缺少注释,而这些@Expose注释可能没有用。确保嵌入式类还具有主要构造函数。当一个类中有多个构造函数时,除了一个之外,其他所有人都必须添加@Ignore批注,以便它知道要使用哪个注释...并且它始终必须是一个空的构造函数,而该构造函数不需要任何内容论点。