Dagger 2.15:AppComponent - 无法处理此接口

2024-03-19

我无法构建我的应用程序,并出现以下错误:

 Task :app:kaptDebugKotlin
        debug/AppComponent.java:7: error: [ComponentProcessor:MiscError] dagger.internal.codegen.ComponentProcessor was unable to process this interface because not all of its dependencies could be resolved. Check for compilation errors or a circular dependency with generated code.
public abstract interface AppComponent {
            ^

我正在使用 dagger 2.15 并包含它的所有依赖项:

    implementation deps.dagger.runtime
    implementation deps.dagger.android
    implementation deps.dagger.android_support
    kapt deps.dagger.android_support_compiler
    kapt deps.dagger.compiler

Code of AppComponent.kt

@Singleton
@Component(
    modules = [
        AndroidInjectionModule::class,
        AppModule::class,
        MainActivityModule::class]
)
interface AppComponent {
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: Application): Builder
        fun build(): AppComponent
    }

    fun inject(app: App)
}

Code of AppModule.kt:

@Module(includes = [ViewModelModule::class])
class AppModule {

    @Provides
    @Singleton
    fun provideApplication(app: App): Context = app

    @Singleton
    @Provides
    fun provideRetrofitService(): RetrofitService {
        return Retrofit.Builder()
            .baseUrl("https://dog.ceo/api/")
            .client(createClient())
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(LiveDataCallAdapterFactory())
            .build()
            .create(RetrofitService::class.java)
    }


    @Singleton
    @Provides
    fun provideDb(app: Application): CacheDb {
        return Room
            .databaseBuilder(app, CacheDb::class.java, "cache.db")
            .fallbackToDestructiveMigration()
            .build()
    }

    @Singleton
    @Provides
    fun provideUserDao(db: CacheDb): UserDao {
        return db.dogImagesDao()
    }

    private fun createClient(): OkHttpClient {
        val logger = HttpLoggingInterceptor.Logger { message -> Timber.tag("OkHttp").d(message) }

        val interceptor = HttpLoggingInterceptor(logger)
        interceptor.level = HttpLoggingInterceptor.Level.BODY

        return OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .connectTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(20, TimeUnit.SECONDS)
                .readTimeout(20, TimeUnit.SECONDS)
                .build()
    }
}

Code of MainActivityModule.kt

@Suppress("unused")
@Module
abstract class MainActivityModule {
    @ContributesAndroidInjector(modules = [FragmentBuildersModule::class])
    abstract fun contributeMainActivity(): MainActivity
}

Code of FragmentBuildersModule.kt

@Suppress("unused")
@Module
abstract class FragmentBuildersModule {
    @ContributesAndroidInjector
    abstract fun contributeUserFragment(): UserFragment
}

我在使用 Dagger 时总是遇到这种有限的错误。尝试调试任务但没有提供更多信息。希望其他人可以暗示我一些事情。

最后一件事。我也在使用gradle wrapper 4.7 and Android Studio 3.1.2

UPDATE:

ViewModelModule.kt

@Suppress("unused")
@Module
abstract class ViewModelModule {
    @Binds
    @IntoMap
    @ViewModelKey(UserViewModel::class)
    abstract fun bindUserViewModel(userViewModel: UserViewModel): ViewModel

    @Binds
    abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
}

我从 Google 示例 GitHub 复制了完全相同的代码,并遇到了同样的问题。事实证明,我解决这个问题的方法是清除所有other程序中的错误,尤其是与导入模块相关的错误。因此,我的 Room 数据库部分代码出现了问题,并且出现了构建时错误。起初我以为这与AppComponent错误。但当我清除它们后,一切都很好。这是有道理的,一个不成功构建的模块是一个不能被依赖的依赖项resolved。并且可能是compilation errors错误消息中的意思是一般错误。

希望对你有帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dagger 2.15:AppComponent - 无法处理此接口 的相关文章

  • Android 中多个蓝牙连接的自定义 UUID

    我有一个 Android 设备作为服务器连接到多个蓝牙 Android 客户端 我了解 UUID 的概念以及它的独特之处 我的问题是 我可以为连接到我的服务器的所有客户端使用相同的 UUID 吗 如果没有 我如何以编程方式为我的客户端生成
  • 如何获取每个StorageVolume的可用大小和总大小?

    背景 谷歌 悲伤 计划破坏存储权限 https www xda developers com android q storage access framework scoped storage 这样应用程序将无法使用标准文件 API 和文件
  • 从响应中获取标头(Retrofit / OkHttp 客户端)

    我正在使用 Retrofit 与 OkHttp 客户端和 Jackson 进行 Json 序列化 并希望获取响应的标头 我知道我可以扩展 OkClient 并拦截它 但这发生在反序列化过程开始之前 我基本上需要的是获取标头以及反序列化的 J
  • Android Studio:XML 布局中的“包装在容器中”

    编辑 XML 布局文件时 Eclipse 有一项称为 包裹在容器中 的功能 重新格式化 gt Android gt 可让您选择一个或多个视图并在其周围包裹您选择的布局 Android Studio中有类似的东西吗 目前正在实施中 问题 69
  • 如何在我现有的 Android 应用程序中使用 Telegram API(包括聊天应用程序)?

    我想使用 telegram API 在我现有的 Android 应用程序中开发聊天功能 我不知道如何实施 我认为 看看Telegram 数据库库 测试版 从这里TDLib https core telegram org tdlib 俄语 但
  • Android 深度链接至 Instagram 应用

    Instagram 已经发布了 iOS 深层链接的 url 方案 但尚未为 Android 创建文档 有没有办法深入链接到 Android 上的 Instagram 应用程序 以转到 Instagram 应用程序中的特定位置 例如 Inst
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 从 BroadcastReceiver 类调用活动方法

    我知道我可以做一个内部接收器类来调用接收器中的任何方法 但我的主要活动太大了 要做的事情也很多 因此 我需要一个扩展广播接收器的类 但它不是内部类 并且可以从我的主要活动中调用一种方法 我不知道是否可能 但我的活动是家庭活动和 single
  • 对于一个单元格,RecyclerView onBindViewHolder 调用次数过多

    我正在将 RecyclerView 与 GridLayoutManager 一起使用 对于网格中的每个项目 我需要调用 REST api 来检索数据 然后 从远程异步获取数据后 我使用 UIL 加载 显示图像 一切似乎都很好 但我发现 on
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • 您使用什么物理 Android 设备进行测试?

    有什么好的推荐用于测试目的的物理 Android 设备吗 我正在苹果阵营寻找像 iPod touch 这样的设备 可以帮助 iOS 开发人员测试他们的东西 我知道有 Nexus One 但那东西相当昂贵 而且我并不真正关心手机的东西 而是可
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • 在命令行上卸载 Android SDK 的选定部分

    这与 卸载旧的 Android SDK 版本 https stackoverflow com questions 15182377 uninstall old android sdk versions 除非我想在无头 Linux CI 服务
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A
  • 我的应用程序中的后退按钮出现问题[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想在手机关闭时清除共享首选项值 你
  • Android 屏幕方向错误

    我使用的是 Android HTC HERO 2 1 版本 我写的活动

随机推荐

  • 线程和多处理模块之间有什么区别?

    我正在学习如何使用threading和multiprocessingPython 中的模块可并行运行某些操作并加速我的代码 我发现这很难 也许是因为我没有任何理论背景 来理解threading Thread 对象和一个multiproces
  • 如何检查可见 DOM 中是否存在元素?

    如何在不使用getElementById method 我已经设置了一个现场演示 http jsbin com apawi5 3以供参考 我还将在这里打印代码
  • 如何在 python 中实现“#ifdef”?

    编程于C我曾经有代码部分仅用于调试目的 记录命令等 通过使用这些语句可以完全禁用生产 ifdef预处理器指令 如下所示 ifdef MACRO controlled text endif MACRO 做类似事情的最好方法是什么python
  • 神经网络立即过拟合

    我有一个带有 2 个隐藏层的 FFNN 用于几乎立即过拟合的回归任务 epoch 2 5 取决于 个隐藏单元 ReLU Adam MSE 每层相同的隐藏单元数 tf keras 32 个神经元 128 个神经元 我将调整隐藏单元的数量 但为
  • Q_PROPERTY:成员与读/写

    我正在阅读 Qt 5 5 关于 Q PROPERTY 宏的文档 但我不能很好地理解它 据我所知 您可以在此宏中使用关键字 MEMBER 或访问器 READ WRITE 来代替 如果您使用关键字 MEMBER 则不必编写访问器 因为您可以使用
  • 如何重新编译Google Drive API sdk?

    这是我们的问题 如何在dotnet中重新编译Google Drive api sdk gt 我们没有找到源代码 gt 在二进制包中 有一个源文件未随项目一起提供 我们不知道如何处理它 提问原因 在 dotnet 中 我们无法使用从 Goog
  • mysqlnd_ms 错误 - getaddrinfo 失败,mysqlnd_global_stats 未知

    我正在尝试设置 mysqlnd ms 以便它达到在从属数据库上读取和在主数据库上写入的目的 但是 当 httpd 重新启动时 我收到此错误 PHP Warning PHP Startup Unable to load dynamic lib
  • ASP.NET Core 中的 IHttpActionResult 和辅助方法

    我正在尝试将我的 web api 2 项目移动到 ASP NET 5 但我有很多不再存在的元素 例如IHttpActionResult or Ok NotFound 方法 或者RoutePrefix 我应该改变每一个IHttpActionR
  • VS2005中如何将静态库项目转换为dll项目

    当我在vs2005中创建一个项目时 我还可以创建 Win32 gt Win32Project 我可以选择 控制台应用程序 或 dll 或 静态库 如果我创建了一个静态库项目 我怎样才能将它转换为dll项目 我在创建的项目的设置面板中找到了
  • MySQL系统数据库表可以转换为InnoDB吗?

    我最近安装了MySQL 5 5 我在用着InnoDB作为我所有数据库的引擎 我注意到mysql数据库默认值及其所有表 用户 数据库等 都是MyISAM 有什么理由他们不能 不应该InnoDB 有谁知道 MySQL 是否需要mysql数据库是
  • 线程内存布局

    我了解进程内存布局的样子 代码 数据 堆 堆栈 但是 我不明白具有多个线程的程序的内存布局究竟是什么样的 毕竟 该进程有一个堆栈 所以我假设所有线程都以某种方式共享相同的堆栈 但这似乎不对 因为每个线程都有自己的堆栈 并且不能保证线程按照调
  • 从 shell_exec() 获取输出和退出状态

    当做类似的事情时 output shell exec command 2 gt 1 收集命令的 stdout 和 stderr output 有没有办法找到命令的退出状态 人们可以将命令输出写入临时文件 然后附加退出状态 但这相当笨重 还有
  • $_SERVER['REQUEST_URI'] 和 header('location: ...') 的任何安全问题;

    我的网站有页眉 页脚和主要内容 如果用户未登录 则对于主要内容 可能会显示登录表单而不是实际内容 在该登录表单上我写了 SERVER REQUEST URI 在会话变量中 SESSION redirect 我的登录表单后处理程序将登录用户
  • Lucene中的geohash索引是如何工作的

    在 lucene space 4 中 我想知道 geohash 索引在幕后是如何工作的 我理解 geohash 的概念 它基本上需要 2 个点 纬度 经度 并创建一个 字符串 哈希 索引只是一个 字符串 索引 r 树或四叉树 还是类似的东西
  • 如何捕获 lambda 表达式内外部变量的值?

    我刚刚遇到以下行为 for var i 0 i lt 50 i Task Factory StartNew gt Debug Print Error i ToString 会导致一系列 Error x 其中大多数x等于50 相似地 var
  • memcpy 在 Linux 中移动 128 位

    我正在 Linux 中为 PCIe 设备编写设备驱动程序 该设备驱动程序执行多次读取和写入来测试吞吐量 当我使用 memcpy 时 最大有效负载TLP https en wikipedia org wiki PCI Express Data
  • Kotlin 是否支持类似于 Swift 中的协议组合的接口组合或未来有计划吗?

    到目前为止我发现的答案可能是否定的 但我想知道未来是否有任何计划支持此功能 这是 Swift 中的样子 协议组合的形式为 SomeProtocol AnotherProtocol 您可以根据需要列出任意多个协议 并用与号 分隔它们 除了协议
  • 在 Entity Framework Core 中使用两列的一对多关系

    在我的项目中我有一张桌子Translation可以有任何模型的翻译 为了实现这一点 该表有两个字段 Model and ModelId The Model属性保存一个整数 指示模型的类型和ModelId有这个模型的id 因此 例如 Prod
  • 删除ggplot2中geom_boxplot中的边框

    这看起来应该相对简单 但我找不到允许我这样做的论点 并且我已经在 Google 和 Stack 中搜索了答案 示例代码 library ggplot2 library plotly dat lt data frame cond factor
  • Dagger 2.15:AppComponent - 无法处理此接口

    我无法构建我的应用程序 并出现以下错误 Task app kaptDebugKotlin debug AppComponent java 7 error ComponentProcessor MiscError dagger interna