当前位置: 首页 > 知识库问答 >
问题:

Dagger 2与Android数据绑定冲突

秦育
2023-03-14

当将Dagger2和Android数据绑定添加到我的项目中时,我会遇到以下构建时间错误。这似乎是一个已知的问题(参见[1]或[2]),因为我得到了完全相同的错误。不幸的是,我不能解决他们(像其他人一样)。是否有人有一个完整的工作设置与当前版本的匕首2和数据绑定,并可以帮助?

C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\ui\navigation\InfoPanelFragment.java:12: error: package com.comparilla.wearcompass.databinding does not exist
import com.comparilla.wearcompass.databinding.FragmentInfoPanelBinding;
                                             ^
C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\ui\navigation\InfoPanelViewModel.java:8: error: cannot find symbol
import com.comparilla.wearcompass.BR;
                                 ^
  symbol:   class BR
  location: package com.comparilla.wearcompass
C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\MobileApplication.java:7: error: cannot find symbol
import com.comparilla.wearcompass.di.components.DaggerMobileApplicationComponent;
                                               ^
  symbol:   class DaggerMobileApplicationComponent
  location: package com.comparilla.wearcompass.di.components
C:\Users\Kai\AndroidStudioProjects\WearCompass\mobile\src\main\java\com\comparilla\wearcompass\di\components\MobileActivityComponent.java:15: error: com.comparilla.wearcompass.common.services.HeadingService cannot be provided without an @Inject constructor or from an @Provides-annotated method.
    void inject(InfoPanelFragment fragment);
         ^
      com.comparilla.wearcompass.common.services.HeadingService is injected at
          com.comparilla.wearcompass.di.modules.ActivityModule.provideInfoPanelViewModel(headingService, …)
      com.comparilla.wearcompass.ui.navigation.InfoPanelViewModel is injected at
          com.comparilla.wearcompass.ui.navigation.InfoPanelFragment.mViewModel
      com.comparilla.wearcompass.ui.navigation.InfoPanelFragment is injected at
          com.comparilla.wearcompass.di.components.MobileActivityComponent.inject(fragment)
4 errors

 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':mobile:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

android {
    compileSdkVersion 24
    buildToolsVersion "23.0.3"

    dataBinding {
        enabled = true
    }
    defaultConfig {
        applicationId "com.comparilla.wearcompass"
        minSdkVersion 21
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    wearApp project(':wear')
    testCompile 'junit:junit:4.12'

    // to enable BuildConfig.DEBUG in the common library
    // see https://stackoverflow.com/a/29163361/166229
    releaseCompile project(path: ':common', configuration: 'release')
    debugCompile project(path: ':common', configuration: 'debug')

    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'com.google.android.gms:play-services-maps:9.0.2'
    compile 'com.android.support:design:24.0.0'
    compile 'com.android.support:preference-v14:24.0.0'

    compile 'com.google.dagger:dagger:2.5'
    apt 'com.google.dagger:dagger-compiler:2.5'
    provided 'javax.annotation:jsr250-api:1.0'
}

共有1个答案

岳出野
2023-03-14

我确实在同一个项目中配置了dagger2和数据绑定,并且没有任何问题。

Dagger 2的配置确实有错误。您尝试注入的HeadingService无法创建,因为您没有为它提供@provide批注,而且该类在构造函数上没有@inject批注。

 类似资料:
  • 在使用新的数据绑定api时,我发现无法绑定到“style”属性。编译器抱怨找不到样式。然而,如果我简单地将样式设置为原样,它会发现它很好。例如: 不工作: 作品: 错误: 错误:任务“:app:compiledBugJavaWithJavaC”的执行失败。 JAVAlang.RuntimeException:发现数据绑定错误。****/数据绑定错误****msg:标识符必须具有XML文件中的用户定

  • 我想知道以下内容之间有什么区别: 与 有任何性能差异吗? 每个的首选用例是什么? 任何其他信息都将不胜感激! 谢谢!

  • 问题内容: 我需要能够动态设置EditText的height属性。我在整个应用程序中都将数据绑定用于其他属性,因此,我希望能够使用数据绑定来控制元素的高度。这是我的xml的精简版本: 这是我的视图模型的精简版: 尺寸在dimens.xml文件中。我正在修改视图模型中的属性。但是,当我启动该应用程序时,我在启动后立即收到以下错误消息(bindingadapter不会在调试时触发)。我在屏幕上还有其他

  • 数据绑定 JXML 中的动态数据来自于该 Page 的 data字段。 简单绑定 数据绑定使用 Mustache 语法(双大括号)将变量包起来,可以作用于以下: 页面内容 <view> hello {{ name }} </view> Page({ data: { name: 'cortana' } }) 组件属性(需要在双引号之内) <view id="{{id}}"> </

  • attr绑定是用来为html元素绑定属性值的,这种绑定非常有用,例如我们需要想一个元素添加title属性,或者为img标签添加src属性。 示例代码: //.W片段 <a bind-attr="{ href: url, title: details }"> Report </a> //js片段 this.url=justep.Bind.observable("year-end.html"),

  • submit绑定只能用在form元素中,当form提交的时候被触发,并且默认阻止form的提交。因此我们通常在submit的处理函数中以ajax的方式提交form表单。 示例代码: //.W片段 <form bind-submit="doSomething"> ... form contents go here ... <button type="submit">Submit</butt