You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中Dagger2注入AndroidX Activity遇初始化异常求助

解决Dagger中dispatchingAndroidInjector未初始化的问题

看起来你遇到的问题核心是MyApplication中的依赖注入没有成功完成,导致dispatchingAndroidInjector这个lateinit字段始终未被赋值,进而在启动MainActivity时触发异常。结合你的代码和描述,我整理了几个关键的修复点:

1. 修正AppComponent的绑定类型与Builder

你的AppModule中provideContext方法依赖的是MyApplication实例,但AppComponent的Builder只绑定了Application类型,Dagger无法自动将Application转换为MyApplication,这会导致依赖图构建失败,最终跳过了inject(this)的执行,使得dispatchingAndroidInjector未初始化。

修改AppComponent代码如下:

@Singleton
@Component( modules = [AndroidSupportInjectionModule::class, AppModule::class, NetworkModule::class, ActivityBuilder::class] )
interface AppComponent : AndroidInjector<MyApplication> { // 改为继承AndroidInjector<MyApplication>
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: MyApplication): Builder // 参数改为MyApplication
        fun build(): AppComponent
    }
}

如果不想修改绑定类型,也可以调整AppModule的provideContext方法,让它依赖Application而非MyApplication:

@Provides
fun provideContext(application: Application): Context {
    return application.applicationContext
}

2. 移除MainActivity中手动的注入调用

你继承了DaggerAppCompatActivity,这个类的onCreate方法已经自动处理了AndroidInjection.inject(this)的逻辑,手动调用不仅多余,还可能因为执行顺序问题引发异常。

修改MainActivity的onCreate方法:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState) // 先调用super,Dagger会自动完成注入
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
}

3. 重新构建项目

Dagger依赖注解处理器生成代码,修改配置后需要清理并重新构建项目,确保生成的代码是最新的:

  • 执行Android Studio中的Build -> Clean Project
  • 再执行Build -> Rebuild Project

为什么另一个项目能正常运行?

另一个项目没有手动调用AndroidInjection.inject(this),而是完全依赖DaggerAppCompatActivity的自动注入逻辑,同时它的Component配置是正确的(比如绑定了正确的Application子类,或者依赖的是通用的Application类型),所以依赖注入流程顺利完成,没有出现未初始化的问题。

内容的提问来源于stack exchange,提问作者Ghizlane Lotfi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:25:28