lateinit属性ViewModelFactory尚未初始化

时间:2019-11-07 07:45:56

标签: android kotlin mvvm

我在我的android项目中使用dagger 2.25.2和androidx.lifecycle进行依赖注入。但是我有一个错误ViewModelFactory尚未初始化

这是我的代码

class PropertyActivity : AppCompatActivity() {

    @Inject
    lateinit var propertyViewModelFactory: PropertyViewModelFactory
    lateinit var propertyViewModel: PropertyViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.property_activity)

        propertyViewModel = ViewModelProviders.of(this, propertyViewModelFactory).get(
        PropertyViewModel::class.java)

        propertyViewModel.loadProperties()
}

ViewModelFactory:

class PropertyViewModelFactory @Inject constructor(
    private val propertyViewModel: PropertyViewModel) : ViewModelProvider.Factory {

    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(PropertyViewModel::class.java!!)) {
            return propertyViewModel as T
        }
        throw IllegalArgumentException("Unknown class name")
    }
}

AppModule:

@Module
class AppModule(val app: Application){

    @Provides
    @Singleton
    fun provideApplication(): Application = app

    @Provides
    @Singleton
    fun providePropertyViewModelFactory(factory: PropertyViewModelFactory): ViewModelProvider.Factory = factory

}

BuildersModule:

@Module
abstract class BuildersModule {

    @ContributesAndroidInjector
    abstract fun contributePropertyActivity(): PropertyActivity
}

AppComponent:

@Singleton
@Component(modules = arrayOf(AndroidInjectionModule::class,BuildersModule::class, AppModule::class))interface PlotComponent {

    fun inject(app: Application)
}

应用程序类:

class PlotApplication : Application(), HasAndroidInjector {
    @Inject
    lateinit var activityInjector: DispatchingAndroidInjector<Any>

    override fun onCreate() {
        super.onCreate()

        DaggerPlotComponent.builder()
            .appModule(AppModule(this))
            .build().inject(this)
    }
    override fun androidInjector(): AndroidInjector<Any> = activityInjector
}

1 个答案:

答案 0 :(得分:0)

我看不到您在活动中注入依赖项的位置。问题可能出在此。

添加

AndroidInjection.inject(this)

在您的onCreate