【问题标题】:lateinit property has not been initialized with dagger2lateinit 属性尚未使用 dagger2 初始化
【发布时间】:2023-03-25 20:53:01
【问题描述】:

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

FragmentsModule 代码

@Module
abstract class FragmentModule {

   @ContributesAndroidInjector
   abstract fun contributesCardFrament(): CardFragment

}

AppModule 代码

@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尚未初始化 在 org.ottochamo.pruebadagger.PruebaDaggerApp.activityInjector(PruebaDaggerApp.kt:28) 在 dagger.android.AndroidInjection.inject(AndroidInjection.java:56) 在 dagger.android.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)

我一直在关注很多文章,但我无法让它发挥作用。非常感谢您的帮助

【问题讨论】:

    标签: android kotlin dagger-2 android-mvvm


    【解决方案1】:

    你在做:

        DaggerAppComponent.builder().build().inject(this)
    

    但您没有为 AppModule 提供构造函数所需的 appContext:

    class AppModule(val app: PruebaDaggerApp) {}
    

    所以你应该像这样创建你的 AppComponent:

        DaggerAppComponent.builder().appModule(AppModule(this)).build().inject(this)
    
    

    【讨论】:

      【解决方案2】:

      我的问题是我请求注入 Application 而不是我的班级 PruebaDaggerApp 并且修复它:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-23
        • 2017-03-03
        • 1970-01-01
        • 2020-12-31
        • 2021-06-11
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多