Как внедрить приложение: контекст в ViewModel с рукояткой?

Здравствуйте, я пытаюсь внедрить модель представления с помощью Hilt, но получаю следующую ошибку:

 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.wordssample, PID: 25250
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.wordssample/com.example.wordssample.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.wordssample.MainViewModel
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
  
 Caused by: java.lang.RuntimeException: Cannot create an instance of class com.example.wordssample.MainViewModel
    at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:221)
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)
    at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
    at androidx.hilt.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:74)
    at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:69)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

Это моя MainActivity:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
   
    private val viewModel  by viewModels<MainViewModel>()


    override fun onCreate(savedInstanceState: Bundle?) {
      ....

А это класс ViewModel, который я пытаюсь внедрить

class MainViewModel @ViewModelInject constructor(
    @ApplicationContext application: Context,
    @Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel() {

    private val repositorio = WordRepositorio(application)

    val allWords = repositorio.mAllWords
...

Я ценю помощь! Спасибо


person Tarsila Costalonga    schedule 28.07.2020    source источник
comment
код в порядке, ошибка где-то еще, также попробуйте обновить библиотеки действий / жизненного цикла (по крайней мере, до последней стабильной версии), developer.android.com/jetpack/androidx/releases/activity, developer.android.com/jetpack/androidx/releases/lifecycle. Лучше создать модуль, который предоставляет WordRepositorio и вводит WordRepositorio вместо Context.   -  person IR42    schedule 29.07.2020
comment
Вы добавили аннотацию @HiltAndroidApp в свой класс Application?   -  person Liem Vo    schedule 29.07.2020
comment
Почему бы вам не внедрить контекст приложения в свой репозиторий, а затем не внедрить свой репозиторий в свою ViewModel?   -  person hosseinAmini    schedule 06.04.2021


Ответы (1)


Да, с кодом все было в порядке. Проблема была в некоторых библиотеках, видимо мне чего-то не хватало.

Я решил это, добавив:

implementation 'com.google.dagger:hilt-android:2.28-alpha'

implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02'

kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha02'

kapt 'com.google.dagger:hilt-android-compiler:2.28-alpha'

implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'

person Tarsila Costalonga    schedule 29.07.2020