Свойство lateinit не было инициализировано с помощью dagger2 - PullRequest
0 голосов
/ 19 мая 2019

Я новичок в 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
}

FragmentsModule code

@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

 }

ViewModelModule

@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: свойство свойства lateinitInjector не было инициализировано в org.ottochamo.pruebadagger.PruebaDaggerApp.activityInger 28 (at).android.AndroidInjection.inject (AndroidInjection.java:56) в dagger.android.support.DaggerAppCompatActivity.onCreate (DaggerAppCompatActivity.java:43) в org.ottochamo.pruebadagger.MainActivity.onCreate (главная).Activity.performCreate (Activity.java:6980) в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1214) в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2828)

Я читал много статей, но не могу заставить его работать.Буду очень признателен за вашу помощь

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Моя проблема заключалась в том, что я запросил инъекцию Application вместо моего класса PruebaDaggerApp и это исправило:)

0 голосов
/ 20 мая 2019

Вы делаете:

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

но вы не предоставляете appContext для AppModule, который требуется в конструкторе:

class AppModule(val app: PruebaDaggerApp) {}

Итак, вы должны создать свой AppComponent как:

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

...