Dagger 和数据绑定

Dagger and databinding

我有一个 MVVM 项目,其中我有 ViewModel classes 扩展 BaseObservable。现在,如果将 @Inject class 放入我的 ViewModel,则编译会失败并出现许多错误,例如:"error: package xxx.databinding does not exist"

我可以使用某种 gradle 技术找到导致此问题的实际错误吗? @Inject 真的支持数据绑定吗?

编辑:

代码与https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding/

完全一样

因为我添加了 dagger,我正在尝试将存储库 @Inject 到扩展 BaseObservable 的视图模型中。一旦我将@Inject 添加到视图模型中,我就无法编译

Dagger 使用数据绑定,您的设置有问题。

当您得到 error: package xxx.databinding does not exist 时,这意味着代码生成失败,并且由于数据绑定和 Dagger 都使用代码生成问题,因此这两个组件的设置可能存在问题。 根据你的描述,你似乎没有正确配置匕首,即没有设置它应该如何提供你正在注入的对象。

确保您在此处 https://google.github.io/dagger//users-guide.html

执行了 "satisfying dependencies" 和 "building the graph" 下的操作

解决此类问题的一般方法是找出与数据绑定相关的错误。一旦这些问题得到修复,您的数据绑定错误就会消失。数据绑定只是大声抱怨,因为构建在它可以做它的事情之前就失败了。不幸的是,这常常感觉像是大海捞针。

如果您有很多错误,您可能需要增加显示的最大错误计数,否则错误输出可能会在打印实际根本原因之前结束。看这里:

Dagger 的 @Inject 通常与数据绑定兼容。

如 Uli 所述,这是由于编译器限制了显示错误的数量。

这样做:

1。通过执行以下操作增加显示的错误限制

将此代码段添加到 android 块内的子模块 gradle 文件中。

kapt {
    javacOptions {
        // Increase the max count of errors from annotation processors.
        // Default is 100.
        option("-Xmaxerrs", 1000)
    }
}

2。找出与绑定无关的错误并修复它们。

即(修复 app/src/.. 文件夹中的错误并忽略 app/build/generated/.. 中与绑定相关的错误)

查看此 thread and this comment 了解更多信息。