具有数据绑定的房间注释处理器
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
他们似乎不能一起工作
到目前为止采取的步骤:
- 将 BaseObservable 更改为 Observable
- 已将 Android Studio 更新至 3.0.1
- 尝试使用 gradle 最新插件 canary 6
- 清除,清除缓存也完成了
有人用过 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 视图下。虽然有可用的切换来获取错误的文本视图响应,但对于数据绑定错误,这还不够。
对我有帮助的解决方案:
- 在命令 promt/Terminal 中导航到项目根目录。
- 运行 这个命令 "./gradlew build --stacktrace" 如果 Mac 或 ".\gradlew
构建 --stacktrace" 如果 Windows.
- 现在搜索 "error:" 标签,将显示编译时错误。
我无法在 IDE 中得到这些错误。
根据我的经验,以下原因可能会导致错误:
- 不正确 getter/setter(名称缺失或不正确)
- 道return输入不正确
- annotationProcessor 或 kapt 问题
- 默认构造函数被覆盖(您需要为 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"
我在现有代码中使用了数据绑定,现在我正在迁移到 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
他们似乎不能一起工作
到目前为止采取的步骤:
- 将 BaseObservable 更改为 Observable
- 已将 Android Studio 更新至 3.0.1
- 尝试使用 gradle 最新插件 canary 6
- 清除,清除缓存也完成了
有人用过 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 视图下。虽然有可用的切换来获取错误的文本视图响应,但对于数据绑定错误,这还不够。
对我有帮助的解决方案:
- 在命令 promt/Terminal 中导航到项目根目录。
- 运行 这个命令 "./gradlew build --stacktrace" 如果 Mac 或 ".\gradlew 构建 --stacktrace" 如果 Windows.
- 现在搜索 "error:" 标签,将显示编译时错误。
我无法在 IDE 中得到这些错误。
根据我的经验,以下原因可能会导致错误:
- 不正确 getter/setter(名称缺失或不正确)
- 道return输入不正确
- annotationProcessor 或 kapt 问题
- 默认构造函数被覆盖(您需要为 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"