Я пытаюсь повторить логику c получения данных из Firebase, что мое приложение делает следующее:
Если нет соединения inte rnet, это вызовет ресурс сбоя и покажет кнопку повтора, но когда я нажимаю эту кнопку, кажется, что модель представления больше не запрашивает данные, а просто показывает мой прогресс без повторного запроса данных в мой репозиторий
UI
viewModel.getPrizes.observe(viewLifecycleOwner, Observer { it ->
when(it){
is Resource.Loading -> {
// Loading...
}
is Resource.Success -> {
hideProgress()
setArrayData(it.data)
}
is Resource.Failure -> {
hideProgress()
hidePrizes()
retry_constrain.visibility = View.VISIBLE
btn_retry.setOnClickListener{
viewModel.getPrizes
showProgress()
retry_constrain.visibility = View.GONE
}
Toast.makeText(
requireContext(),
"An error has ocourred:${it.throwable.message}",
Toast.LENGTH_SHORT
).show()
}
}
})
То, что я вижу здесь, находится в моем Resource.Failure, чтобы запросить данные снова после нажатия моего btn_retry
, но вместо этого он показывает только мой индикатор выполнения, и ничего не происходит
ViewModel
class PrizesViewModel(private val useCase:IPrizes): ViewModel() {
val getPrizes = liveData(Dispatchers.IO) {
emit(Resource.Loading())
try{
val prizes = useCase.fetchPrizes()
emit(prizes)
}catch (e:Exception){
Crashlytics.logException(e.cause)
emit(Resource.Failure(e.cause!!))
}
}
}
Почему не происходит повторное извлечение моих значений после повторного вызова viewModel.getPrizes
в моем Resource.Failure
?