8

我在现有代码中使用了数据绑定,现在我正在迁移到 Room 以实现持久性。我已经按照Florina 的博客中提到的步骤来寻找房间

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

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

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

但是在我把注释处理器放回去之后,它给了我

 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 latest plugin canary 6
  4. 清除,清除缓存也完成

有没有人一起使用房间和数据绑定?

4

3 回答 3

10

经过4天的努力,我终于让我的代码正常运行了。解决问题的步骤

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

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

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

数据绑定和 Room 架构组件的 Gradle 依赖项

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

我更改了所有虚拟机以实现 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 查询相关的错误时,它毫无例外地运行。这是主要原因,代码正在构建但没有运行。当我再次重建我的项目时,我可以看到这些错误。

更新:

Android studio 3.1.3之后,消息窗口消失了,现在所有构建错误都出现在构建视图下。尽管有可用的切换来获取文本视图的错误响应,但对于数据绑定错误,这还不够。

帮助我的解决方案:

  1. 在命令提示符/终端中导航到项目根目录。
  2. 如果 Mac 运行此命令“./gradlew build --stacktrace”,如果 Windows 运行“.\gradlew build --stacktrace”。
  3. 现在搜索“error:”标签,编译时错误就会出现。

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

于 2018-01-22T10:49:21.033 回答
0

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

  1. 不正确的 getter/setter(名称缺失或不正确)
  2. Dao 中的返回类型不正确
  3. annotationProcessor 或 kapt 问题
  4. 默认构造函数被覆盖(您需要保留 Room 的空构造函数)
于 2019-08-15T22:28:32.283 回答
0

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

 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"
于 2020-06-17T15:07:21.683 回答