Android Room 库错误:找不到字段的设置器。 (科特林)
Posted
技术标签:
【中文标题】Android Room 库错误:找不到字段的设置器。 (科特林)【英文标题】:Android Room library error: Cannot find setter for field. (Kotlin) 【发布时间】: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:
^
请为此提出一些修复建议。
谢谢
【问题讨论】:
【参考方案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,
谢谢
【讨论】:
以上是关于Android Room 库错误:找不到字段的设置器。 (科特林)的主要内容,如果未能解决你的问题,请参考以下文章
找不到字段的设置器 - 将 Kotlin 与 Room 数据库结合使用
Android Studio:房间:错误:找不到字段的吸气剂
找不到类,使用 Android Studio 3.0.1、Room、Kotlin 的 androidTest 中的空测试套件