gpt4 book ai didi

android - lateinit 属性尚未用 dagger2 初始化

转载 作者:行者123 更新时间:2023-12-05 06:26:22 26 4
gpt4 key购买 nike

我是 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

我的 AppComponent。

@Singleton
@Component(modules = [AndroidSupportInjectionModule::class, AppModule::class, ActivityModule::class])
interface AppComponent {

fun inject(app: Application)

}

ActivityModule代码

@Module
abstract class ActivityModule {
@ContributesAndroidInjector(modules = [FragmentModule::class])
abstract fun contributesMainActivity(): MainActivity
}

Fragments模块代码

@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

}

ViewModelModule

@Module
abstract class ViewModelModule {

@Binds
abstract fun bindViewModelFactory(viewModelFactory: DaggerViewModelFactory): ViewModelProvider.Factory

@Binds
@IntoMap
@ViewModelKey(CardViewModel::class)
abstract fun bindCardViewModel(viewModel: CardViewModel): ViewModel


}

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property activityInjector has not been initialized at org.ottochamo.pruebadagger.PruebaDaggerApp.activityInjector(PruebaDaggerApp.kt:28) at dagger.android.AndroidInjection.inject(AndroidInjection.java:56) at dagger.android.support.DaggerAppCompatActivity.onCreate(DaggerAppCompatActivity.java:43) at org.ottochamo.pruebadagger.MainActivity.onCreate(MainActivity.kt:14) at android.app.Activity.performCreate(Activity.java:6980) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) at 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)

关于android - lateinit 属性尚未用 dagger2 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56206161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com