具有数据绑定的房间注释处理器

Room annotation processor with Data binding

我在现有代码中使用了数据绑定,现在我正在迁移到 Room 以实现持久性。 对于房间

,我已按照 Florina's Blog 中提到的步骤进行操作

当我删除房间相关性时,我的代码构建良好,没有 java 代码错误或 BR 相关错误

 annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'

及其运行,但给出运行时异常说 database_Impl 不存在。因为它无法生成那个文件。

但是当我把 Annotation processor 放回去后,它给了我

 Error:(29, 37) error: cannot find symbol class BR

我的gradle插件使用的是com.android.tools.build:gradle:3.0.1

他们似乎不能一起工作

到目前为止采取的步骤:

  1. 将 BaseObservable 更改为 Observable
  2. 已将 Android Studio 更新至 3.0.1
  3. 尝试使用 gradle 最新插件 canary 6
  4. 清除,清除缓存也完成了

有人用过 Room 和 Data 绑定吗?

经过 4 天的努力,我终于把我的代码 运行 写好了。 解决

的步骤

数据绑定错误如 错误:包 com.packagename.databinding 不存在 错误:找不到符号 class CustomMainActivityBinding

应用 gradle 必须添加以下代码才能查看默认出现的 100 多个错误

allprojects {
gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xmaxerrs" << "4000"
        options.compilerArgs << "-Xmaxwarns" << "4000"
    }
  }
}

Gradle 数据绑定和 Room arch 组件的依赖关系

annotationProcessor 'com.android.databinding:compiler:3.0.1'

implementation 'android.arch.lifecycle:extensions:1.0.0'
implementation 'android.arch.persistence.room:runtime:1.0.0'
annotationProcessor 'android.arch.lifecycle:compiler:1.0.0'
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'

注意:Gradle插件版本为3.0.1

我更改了所有 VM 以实现 Observable 并调用

registry.notifyChange(this, BR.bar);

在通知更改的情况下并实现覆盖的方法

@Override
public void addOnPropertyChangedCallback(OnPropertyChangedCallback    
callback) {
registry.add(callback);
}

@Override
public void removeOnPropertyChangedCallback(
OnPropertyChangedCallback callback) {
registry.remove(callback);
}

这些东西使我的代码得以构建,但当我解决与 Room 查询相关的错误时,它 运行 无一例外。这是主要原因,代码正在构建而不是 运行ning。当我再次 Rebuid 我的项目时,我可以看到这些错误。

更新:

Androidstudio 3.1.3消息window 消失了,现在所有构建错误都出现在 Build 视图下。虽然有可用的切换来获取错误的文本视图响应,但对于数据绑定错误,这还不够。

对我有帮助的解决方案:

  1. 在命令 promt/Terminal 中导航到项目根目录。
  2. 运行 这个命令 "./gradlew build --stacktrace" 如果 Mac 或 ".\gradlew 构建 --stacktrace" 如果 Windows.
  3. 现在搜索 "error:" 标签,将显示编译时错误。

我无法在 IDE 中得到这些错误。

根据我的经验,以下原因可能会导致错误:

  1. 不正确 getter/setter(名称缺失或不正确)
  2. 道return输入不正确
  3. annotationProcessor 或 kapt 问题
  4. 默认构造函数被覆盖(您需要为 Room 保留空构造函数)

我在添加房间依赖项时遇到了这个问题。以下面的方式添加它来解决错误。

 def roomVersion = "2.0.0-rc01"
implementation "android.arch.persistence.room:runtime:$roomVersion"
annotationProcessor "android.arch.persistence.room:runtime:$roomVersion"
annotationProcessor "android.arch.persistence.room:compiler:$roomVersion"