свойство lateinit ViewModelFactory не было инициализировано - PullRequest
0 голосов
/ 07 ноября 2019

Я использую dagger 2.25.2 и androidx.lifecycle для внедрения зависимостей в моем проекте Android. Но у меня есть ошибка 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 голосов
/ 07 ноября 2019

Я не вижу, куда вы привносите зависимость в свою деятельность. Проблема может быть в этом.

Добавить

AndroidInjection.inject(this)

в вашем onCreate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...