Android Ошибка параметра ViewModelProvider () - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь получить значение из класса SharedViewModel, но ViewModelProvider () выдает ошибку параметра, когда я передаю requireActivity (), хотя те же инициализация и назначение работают в моих фрагментах.

Это требующий передачи «ViewModelStoreOwner».

class CourseRepository(val app: Application) {

    private var viewModel: SharedViewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)
    val courseData = MutableLiveData<List<Course>>()

    init {
        CoroutineScope(Dispatchers.IO).launch {
            callWebService()
        }
    }

    @WorkerThread
    suspend fun callWebService() {
        if (Utility.networkAvailable(app)) {
            val retrofit = Retrofit.Builder().baseUrl(WEB_SERVICE_URL).addConverterFactory(MoshiConverterFactory.create()).build()
            val service = retrofit.create(CourseService::class.java)
            val serviceData = service.getCourseData(viewModel.pathName).body() ?: emptyList()
            courseData.postValue(serviceData)
        }
    }
}

Цель ViewModel здесь заключается в том, что я храню Id выбранного элемента RecyclerView для отправки его на сервер

1 Ответ

0 голосов
/ 29 апреля 2020

Экземпляры ViewModel относятся к фрагментам или операциям (или к чему-либо с аналогичным жизненным циклом), поэтому вам нужно передать ViewModelStoreOwner провайдеру, чтобы получить от него ViewModel. Смысл ViewModels в том, что они будут существовать до тех пор, пока хранилище, к которому они принадлежат, не будет уничтожено.

Метод requireActivity здесь не работает, потому что вы находитесь не внутри фрагмента.

Некоторые вещи, которые следует учитывать здесь:

  • Вам действительно нужна ViewModel в этом случае использования? Не могли бы вы, возможно, использовать обычный класс, который вы можете создать, вызвав его конструктор?
  • Не могли бы вы назвать этот репозиторий из вашей ViewModel и передать оттуда любые нужные вам параметры?
...