错误:找不到字段的吸气剂;当数据类与 Room 一起使用时

Posted

技术标签:

【中文标题】错误:找不到字段的吸气剂;当数据类与 Room 一起使用时【英文标题】:error: Cannot find getter for field; When data classes used with Room 【发布时间】:2018-12-09 20:00:03 【问题描述】:

我有这个数据类:

@Entity(tableName = User.TABLE_NAME)
data class User(
        @PrimaryKey @ColumnInfo(name = User.id) var id: String = "",
        @ColumnInfo(name = User.name) var name: String = "",
        @ColumnInfo(name = User.password) var password: String = "",
        @ColumnInfo(name = User.modDate) var modDate: DateTime = DateTime(1970, 1, 1, 0, 0)
)

编译时出现以下错误:

e: C:\Users\Tibi\androidStudioProjects\Android_Sales\EventApp\app\build\tmp\kapt3\stubs\debug\com\tiborfarago\eventapp\database\User.java:11: error: Cannot find getter for field.
    private java.lang.String id$1;
                             ^
e: C:\Users\Tibi\AndroidStudioProjects\Android_Sales\EventApp\app\build\tmp\kapt3\stubs\debug\com\tiborfarago\eventapp\database\User.java:14: error: Cannot find getter for field.
    private java.lang.String name$1;
                             ^
e: C:\Users\Tibi\AndroidStudioProjects\Android_Sales\EventApp\app\build\tmp\kapt3\stubs\debug\com\tiborfarago\eventapp\database\User.java:17: error: Cannot find getter for field.
    private java.lang.String password$1;
                             ^
e: C:\Users\Tibi\AndroidStudioProjects\Android_Sales\EventApp\app\build\tmp\kapt3\stubs\debug\com\tiborfarago\eventapp\database\User.java:20: error: Cannot find getter for field.
    private org.joda.time.DateTime modDate$1;
                                   ^

如果我在 Java 中重新创建类,应用程序运行良好。

我不确定我应该提供哪些额外信息,因为我使用的所有东西都像以前一样。

让我感到奇怪的是,它不会错过 setter,只会错过 getter。 编辑:现在二传手也不见了。

编辑2: 出于某种原因,这是可行的:

@Entity(tableName = "sfdfs")
data class Eventdasdsa(
        @PrimaryKey @ColumnInfo(name = "s") var idgfgh: String = "",
        @ColumnInfo(name = "sfdsfdfs") var locatgfhgfionId: String? = "",
        @ColumnInfo(name = "hhhhjghjg") var nafhfhgffme: String? = ""
)

【问题讨论】:

【参考方案1】:

我设法弄明白了:

在数据类的主体中,我有一个包含 const vals 的伴随对象。这些变量的名称与数据类的字段名称相同,这导致了问题。

【讨论】:

【参考方案2】:

这些来自abstract class CloudDBZoneObjectextends CloudDBZoneObject。必须将这些字段复制到每个类中,才能添加 Room @Ignore 注释。

@Ignore private String entityName;
@Ignore private String packageName;
@Ignore private long mObjectSize;

这至少可以构建它。


但是 Room 还存在进一步的兼容性问题,例如。默认构造函数:

com.huawei.agconnect.cloud.database.CloudDBZoneObject 中没有可用的默认构造函数。

数据绑定也是一个问题,因为它不是Observable

Bindable 必须在 Observable 类的成员上。 XY 不可观察。


不直接使用/绑定CloudDBZoneObject 可能有意义。

【讨论】:

以上是关于错误:找不到字段的吸气剂;当数据类与 Room 一起使用时的主要内容,如果未能解决你的问题,请参考以下文章

颤振:错误:找不到吸气剂:“暂停”。案例 AppLifecycleState.suspending

为啥 TForm.Handle 是一个吸气剂而不是一个字段?

实体模型上的自定义吸气剂?

类内的吸气剂模式?

Flutter:没有为“RetryOptions”类定义吸气剂“Pestawait”

吸气剂'loadingStatus'在空颤时被调用