【问题标题】:Android Room library error: Cannot find setter for field. (Kotlin)Android Room 库错误:找不到字段的设置器。 (科特林)
【发布时间】:2018-05-09 03:09:03
【问题描述】:

我正在使用房间图书馆,我有以下提到的实体:

@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:      



                     ^

请为此提出一些修复建议。

谢谢

【问题讨论】:

    标签: android kotlin android-room


    【解决方案1】:

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

    问题一:

    Final 字段:字段用 val 标记,它们实际上是 final 并且没有 setter 字段。

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

    问题 2:

    是关键字:我们不能将sqllite保留关键字行用于命名source的字段,例如

    以下会导致错误

     @ColumnInfo(name = "IS_ACTIVE") var isActive
    

    解决方案:解决方案是:

    @ColumnInfo(name = "IS_ACTIVE") var active
    

    【讨论】:

    • 对我来说,你不能用像'is'这样的前缀来定义类属性,这似乎很荒谬。我相信可以毫无困难地创建具有这样前缀的列。无论如何,非常感谢您提供这些信息!
    【解决方案2】:

    我从

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

    最后的代码是:

    @PrimaryKey(autoGenerate = true)
            var sr_no: Int
    

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

    【讨论】:

      【解决方案3】:

      在使用 kotlin java 代码生成的房间 orm 库中存在问题。

      我的可选字段isFavorite 和编译时相同的错误然后我将我的字段名称更改为favorite 然后编译。

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

      【讨论】:

        猜你喜欢
        • 2018-07-25
        • 1970-01-01
        • 2020-10-17
        • 2017-10-28
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 2021-09-23
        • 2020-07-21
        相关资源
        最近更新 更多