【问题标题】:Dagger and databinding匕首和数据绑定
【发布时间】:2017-07-19 21:27:22
【问题描述】:

我有一个 MVVM 项目,其中有扩展 BaseObservable 的 ViewModel 类。现在,如果将 @Inject 类放在我的 ViewModel 中,则编译会失败并出现许多错误,例如:“错误:包 xxx.databinding 不存在”

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

编辑:

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

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

【问题讨论】:

  • 请显示代码
  • 添加了我克隆的示例项目的链接以及我所做更改的描述。

标签: android mvvm dagger-2 android-databinding dagger


【解决方案1】:

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

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

Dagger 的@Inject 与一般数据绑定兼容。

【讨论】:

  • 我已经知道你在说什么,我只是想要一种方法来看看错误是什么。感谢您的链接。太糟糕了,谷歌没有将这些作为 gradle 模板的默认设置。原来这是最简单的错误“Dagger 不支持注入私有字段”。非常感谢您的帮助。
【解决方案2】:

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

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

确保您从此处https://google.github.io/dagger//users-guide.html 执行了“满足依赖关系”和“构建图表”下的操作

【讨论】:

    【解决方案3】:

    就像 Uli 提到的,这是由于显示的错误数量受到编译器的限制。

    这样做:

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

    将此 sn-p 添加到 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/.. 中与绑定相关的错误)

    查看threadcomment 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多