我是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代码
@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: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)
我一直在关注很多文章,但我无法使其正常运行。非常感谢您的帮助
答案 0 :(得分:0)
您正在做
preform(segue...)
但是您没有为构造函数中所需的AppModule提供appContext:
DaggerAppComponent.builder().build().inject(this)
因此,您应该像这样创建AppComponent:
class AppModule(val app: PruebaDaggerApp) {}
答案 1 :(得分:0)
我的问题是我请求注入Application
而不是我的班级PruebaDaggerApp
并解决了问题:)