使用dagger2

时间:2018-05-25 11:08:44

标签: android data-binding kotlin dagger-2

编译我的应用程序时,我在所有生成的WhateverFragmentOrActivityBinding类上都收到以下错误:

error: cannot find symbol
  protected WhateverFragmentOrActivityBinding(DataBindingComponent _bindingComponent, View _root,
                                         ^
  symbol:   class DataBindingComponent
  location: class WhateverFragmentOrActivityBinding

似乎没有生成DataBindingComponent类。

查看DataBindingComponent的文档,我们看到:

  

如果使用Dagger 2,开发人员应该扩展此接口和   将扩展接口注释为Component。

我确实使用Dagger 2,所以我怀疑这可能是相关的。我自己试图这样做,无济于事,无法在互联网上找到它。这就是我尝试过的:

@Component(dependencies = [AppComponent::class], modules = [(AppModule::class), (AndroidInjectionModule::class), (ActivityBuilderModule::class)])
interface BindingComponent : DataBindingComponent

但是,从未生成DaggerBindingComponent类,因为找不到我已经拥有的符号错误。这似乎是一个鸡和蛋的问题,所以我不相信这是我的问题的解决方案。

DataBindingComponent似乎负责处理BindingAdapters。我有一些自定义绑定适配器用于绑定ImageView src属性,但即使注释掉这些适配器也无济于事,所以我不确定它们是否相关。

我尝试完全从应用程序中移除Dagger并且问题没有消失。不知道还有什么可以尝试

u_u

2 个答案:

答案 0 :(得分:1)

前几天我遇到了同样的问题,我正在使用产品调味料,其中一种(我目前正在开发的调味料)无法访问所需的类,这导致所有绑定类均失败,我在每个Activity或Fragment绑定类上都遇到了多个错误。

我也在使用Dagger2,我的模块之一无法访问类(CustomBroadcastReceiver)

@Module
abstract class BroadcasReceiverModule {

    @ContributesAndroidInjector
    internal abstract fun contributePhoneStateBroadcastReceiver(): CustomBroadcastReceiver
}

此错误在构建过程之后从未显示过,BroadcastReceiverModule是我的“主要”资源的一部分,但是对于我在CustomBroadcastReceiver不存在的情况下使用的风味而言,则不是必需的

即使不是必需的,在我从“主要”资源中删除BroadcastReceiverModule并将其仅放置在实际需要的样式上之后,它仍然会产生许多错误,并消失

答案 1 :(得分:1)

我有同样的错误消息。

然后我发现使用/构建数据绑定时Studio 正在显示错误,默认情况下,构建输出也不显示超过100行错误,因此:

https://github.com/google/dagger/issues/306

将此添加到build.gradle:

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xmaxerrs" << "500" // or whatever number you want
    }
}

然后我发现了实际错误:

https://github.com/google/dagger/issues/1245

https://issuetracker.google.com/issues/115738511

对我来说,解决方案是将Dagger 2.19降级到Dagger 2.16。