android - lateinit 属性尚未使用 dagger2 初始化
问题描述
我是 Android 新手,我正在尝试使用 Dagger2 和 MVVM 模式以及 kotlin 创建一个应用程序,但我无法让它运行。
我的应用程序类代码。
class PruebaDaggerApp: Application(), HasActivityInjector, HasSupportFragmentInjector {
@Inject
lateinit var activityInjector: DispatchingAndroidInjector<Activity>
@Inject
lateinit var fragmentInjector: DispatchingAndroidInjector<Fragment>
override fun onCreate() {
super.onCreate()
DaggerAppComponent.builder().build().inject(this)
}
override fun activityInjector(): AndroidInjector<Activity> = activityInjector
override fun supportFragmentInjector(): AndroidInjector<Fragment> = fragmentInjector
}
我的应用组件。
@Singleton
@Component(modules = [AndroidSupportInjectionModule::class, AppModule::class, ActivityModule::class])
interface AppComponent {
fun inject(app: Application)
}
活动模块代码
@Module
abstract class ActivityModule {
@ContributesAndroidInjector(modules = [FragmentModule::class])
abstract fun contributesMainActivity(): MainActivity
}
片段模块代码
@Module
abstract class FragmentModule {
@ContributesAndroidInjector
abstract fun contributesCardFrament(): CardFragment
}
应用模块代码
@Module(includes = [ViewModelModule::class])
class AppModule(val app: PruebaDaggerApp) {
@Provides
@Singleton
fun provideApplicationContext(): Context = app.applicationContext
}
视图模型模块
@Module
abstract class ViewModelModule {
@Binds
abstract fun bindViewModelFactory(viewModelFactory: DaggerViewModelFactory): ViewModelProvider.Factory
@Binds
@IntoMap
@ViewModelKey(CardViewModel::class)
abstract fun bindCardViewModel(viewModel: CardViewModel): ViewModel
}
引起:kotlin.UninitializedPropertyAccessException:lateinit 属性 activityInjector 尚未在 dagger.android.AndroidInjection.inject(AndroidInjection.java:56) 处的 org.ottochamo.pruebadagger.PruebaDaggerApp.activityInjector(PruebaDaggerApp.kt:28) 处初始化.support.DaggerAppCompatActivity.onCreate(DaggerAppCompatActivity.java:43) 在 org.ottochamo.pruebadagger.MainActivity.onCreate(MainActivity.kt:14) 在 android.app.Activity.performCreate(Activity.java:6980) 在 android.app。 Instrumentation.callActivityOnCreate(Instrumentation.java:1214) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2828)
我一直在关注很多文章,但我无法让它发挥作用。非常感谢您的帮助
解决方案
你正在做:
DaggerAppComponent.builder().build().inject(this)
但是您没有为构造函数中所需的 AppModule 提供 appContext:
class AppModule(val app: PruebaDaggerApp) {}
所以你应该像这样创建你的 AppComponent:
DaggerAppComponent.builder().appModule(AppModule(this)).build().inject(this)
推荐阅读
- amazon-web-services - 适用于 EC2、EMR、Redshift、RDS 的 AWS 开发工具包用例
- java - 面对 java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
- go - 即使我得到一个着色器编译错误,所有着色器都可以正常工作。如何?
- css - 带有重复修饰符的 CSS 后代选择
- python - 如何在不更改任何默认值的情况下在 Ubuntu 上为 python 3.8 安装 pip?
- docker - 如何使用 docker compose 指定 GPU 限制 docker swarm?
- python - “is” Python 运算符是否可靠地测试可变对象的引用相等性?
- c++ - 为什么在我的程序中找不到 dll 的入口点?文件
- python - 当我尝试向用户添加 exp 时,我收到 KeyError: '563690668808208423'
- javascript - 无法使用 Firebase 云功能发送电子邮件