Room @Ignore注释生成编译时错误

时间:2018-10-31 05:24:00

标签: android kotlin android-room

我正在使用Room,这是我的数据类

@Entity(tableName = "buy_lead")
class BuyLead(
    @PrimaryKey
    @SerializedName("id")
    val id: String,

    @SerializedName("name")
    val name: String,

    @SerializedName("location")
    val location: String,

    @SerializedName("state")
    val state: String?,

    @SerializedName("message")
    val message: String,

    @SerializedName("product_service")
    val serviceType: String?,

    @SerializedName("posted_on")
    val postedOn: String,

    @SerializedName("formatted_date")
    val formattedDate: String,

    @SerializedName("seconds")
    val seconds: Int,

    @SerializedName("minutes")
    val minutes: Int,

    @SerializedName("hours")
    val hours: Int,

    @SerializedName("days")
    val days: Int,

    var bought: Boolean = false,
    @Ignore var error: String? = null
) {
    val postTime: String
    get() {
        if (seconds < 60) {
            if (seconds == 1)
                return "$seconds second ago"
            return "$seconds seconds ago"
        }

        if (minutes < 60) {
            if (minutes == 1)
                return "$minutes minute ago"
            return "$minutes minutes ago"
        }

        if (hours < 24) {
            if (hours == 1)
                return "$hours hour ago"
            return "$hours hours ago"
        }

        if (days < 5) {
            if (days == 1)
                return "$days day ago"
            return "$days days ago"
        }
        return formattedDate
    }

val address: String
    get() =
        if (state != null) "${location}, ${state}"
        else location
}

它会生成编译时错误

  

错误:实体和Pojos必须具有可用的公共构造函数。您可以有一个空的构造函数或一个其参数与字段匹配的构造函数(按名称和类型)。   公开最终班BuyLead {                ^

我试图在班级内部移动字段,但没有任何反应。如果我从错误中删除了@Ignore批注,它将进行编译。我不想在数据库中存储错误字段。

  

kotlin版本为1.2.71

2 个答案:

答案 0 :(得分:0)

尝试将主要/默认构造函数添加到您的类中。

像这样

class BuyLead()( . . .
)

另一个例子,

class ByLead( . . .
    constructor() (
    )
)

答案 1 :(得分:0)

我不知道这是错误还是功能,但Room期望其中之一:

  • 无参数构造函数或
  • 所有字段未标有@Ignore的构造函数

例如:

@Entity(tableName = "movies")
data class MovieKt(
    @PrimaryKey
    var id : Int,
    var title: String,
    @Ignore var overview: String) 

将不起作用。这将:

@Entity(tableName = "movies")
data class MovieKt(
    @PrimaryKey
    var id : Int,
    var title: String)