Android中Dagger2注入AndroidX Activity遇初始化异常求助
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

