Android Room库错误:无法找到字段的setter。 (科特林)

时间:2017-11-25 09:35:36

标签: android kotlin android-room

我正在使用房间库,我有下面提到的实体:

@Parcelize
@Entity(tableName = "tb_option")
data class OptionsTable(
        var question_id: Int? = null,
        var option_id: Int? = null,
        var option: String? = null,
        var is_selected: Int? = null,


        @PrimaryKey(autoGenerate = true)
        var sr_no: Int = 0) : Parcelable

如您所见,我将所有字段声明为var,但仍显示错误:

error: Cannot find setter for field.
e: 

e:     private java.lang.Integer is_selected;
e:      



                     ^

请为此提出一些解决方法。

由于

3 个答案:

答案 0 :(得分:2)

大部分时间问题都是由于以下原因而发生的:

问题1:

最终字段:字段标有val,它们实际上是最终字段,没有setter字段。

解决方案:将字段 val 替换为 var 。您可能还需要初始化字段。

问题2:

是关键字:我们不能将sqllite保留关键字行用于命名https://guyinacube.com/2016/07/3-ways-to-embed-power-bi/的字段,例如

以下将导致错误

 @ColumnInfo(name = "IS_ACTIVE") var isActive

解决方案:解决方案是:

@ColumnInfo(name = "IS_ACTIVE") var active

答案 1 :(得分:1)

我从

中删除了sr_no的初始化
@PrimaryKey(autoGenerate = true)
        var sr_no: Int = 0

,最终代码为:

@PrimaryKey(autoGenerate = true)
        var sr_no: Int

对我有用,因为它是一个自动生成的字段。

答案 2 :(得分:0)

使用Kotlin Java代码生成的房间orm库中存在一个问题。

我的可选字段isFavorite和编译时间相同,然后我将字段名称更改为favorite然后进行编译。

之前 var isFavorite: Int? = 0, 工作正常: var favorite: Int? = 0, 谢谢