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

时间:2018-01-20 13:05:07

标签: android android-databinding android-room 2-way-object-databinding annotation-processor

我在现有代码中使用了数据绑定,现在我正在迁移到Room以进行持久化。 我已按照 Florina's Blog中提到的步骤进行了审核

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

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

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

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

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

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

他们俩似乎都没有合作

到目前为止采取的步骤:

  1. 将BaseObservable更改为Observable As suggested here
  2. 将Android Studio更新为3.0.1
  3. 尝试使用gradle最新插件canary 6
  4. 清除,清除缓存也已完成
  5. 有没有人一起使用Room和Data绑定?

3 个答案:

答案 0 :(得分:9)

经过4天的努力,我终于让我的代码正常运行了。

解决的步骤

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

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

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'

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

registry.notifyChange(this, BR.bar);

注意:Gradle插件版本为3.0.1

我更改了所有虚拟机以实现Observable并调用

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

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

如果通知更改并且还实现了重写方法

data () {
  return {
    post: {
      body: 'this is body'
    }
  }
}

这些东西使我的代码构建,但是当我解决了与Room查询相关的错误时,它运行没有异常。这是主要原因,代码正在构建但没有运行。当我重新重建我的项目时,我可以看到这些错误。

更新:

Android studio 3.1.3 之后, 消息 窗口消失,现在所有构建错误都显示在 Build < / em> 查看。尽管可以使用切换来获取错误的textview响应,但是对于数据绑定错误,它是不够的。

帮助我的解决方案:

  1. 在Command promt / Terminal中导航到项目根目录。
  2. 运行此命令&#34; ./ gradlew build --stacktrace&#34;如果Mac或&#34;。\ gradlew build --stacktrace&#34;如果是Windows。
  3. 现在搜索&#34;错误:&#34;标记和编译时错误将显示出来。
  4. 我无法在IDE中收到这些错误。

答案 1 :(得分:0)

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

  1. getter / setter错误(名称缺失或不正确)
  2. 道返回类型不正确
  3. annotationProcessor或kapt问题
  4. 默认构造函数被覆盖(您需要保留Room的空构造函数)

答案 2 :(得分: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"