dagger2 使用无法自动生成dagger + component 等问题集錦

本文总结了Dagger2在使用过程中遇到的问题,包括无法自动生成组件、初始化错误、注入问题以及未实现的错误。解决方案包括检查Gradle配置,确保使用正确的注入参数,以及处理未完成的任务(TODO)。通过这些步骤,可以解决Dagger2的常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 dagger2 使用无法自动生成dagger + component 问题

 一般两种方法进行注册:

方法一:

实体类  Product 构造方法: 

class Product @Inject constructor() {
    fun showPro(): String {
        return "shb##@@"
    }
}

桥梁 component:

@Component
interface ProductComponent {
    fun inject(mainActivity: MainActivity) {}
}

方法二:

实体类Stu:(没什么变化)

class Stu {

    val msg = "Stu 的实例是注解方式注入的"

    fun showMessage(): String {
        return msg
    }

}

module中添加@provides注解

@Module
class StuModule {

    @Singleton
    @Provides
    fun provideStu(): Stu {
        return Stu()
    }
}

桥梁component,关联module

@Singleton
@Component(modules = arrayOf(StuModule::class))
interface StuComponent {
    fun inject(activity: FirstActivity) //inject 参数就是我们需要注入开始的类
}

一般这样再进行rebuild 应该会有 dagger + xxx + component 可以进行实例注解,可是突然发现死活没法出现,折腾了半天,发现gradle 文件中少了 

apply plugin: 'kotlin-kapt'

添加后再rebuild 就可以出现了,哈哈~~就是这么简单,这么坑

二、dagger2 中rebuild 的时候编译通过,但是使用dagger + xxx + component 注册后,获取实例老是报

 Caused by: kotlin.UninitializedPropertyAccessException: lateinit property stu has not been initialized 这个错误

分析发现是component 问题,inject()方法中参数应该是需要实例化的当前活动,而不能是父类

@Singleton
@Component(modules = arrayOf(StuModule::class))
interface StuComponent {
    fun inject(activity: AppCompatActivity) //inject 参数就是我们需要注入开始的类
}

改为

@Singleton
@Component(modules = arrayOf(StuModule::class))
interface StuComponent {
    fun inject(activity: FirstActivity) //inject 参数就是我们需要注入开始的类
}

三、 com.shb.android.dagger2test.presenter.Register cannot be provided without an @Inject constructor or from an @Provides-annotated  

看到提示错误指向也是component 中的inject()方法,其实问题解决情况和二一样。

四、kotlin.NotImplementedError: An operation is not implemented: not implemented

 override fun loginFailure() {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        Toast.makeText(this, "登录失败...", Toast.LENGTH_SHORT)
    }

问题就储在TODO这里,需要删除掉TODO就好了,这个TODO用处:配合IDE自动声明的TODO, 会强制开发者去实现这个TODO或者删除它。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值