Я пытаюсь использовать Kotlin сопрограмм для запуска сетевого запроса и обработки исключений. Я посмотрел много уроков по сопрограммам, но я действительно изо всех сил пытаюсь связать то, что я знаю, с проблемой, которая у меня есть.
Проблема
Попытка получить исключение для быть пойманным в представлении, но из ViewModel не выдается исключение, поэтому приложение вылетает.
Приложение Code
My Android имеет три уровня, которые относятся к этой проблеме. У меня есть View, ViewModel и слой службы. На уровне службы request.execute () может выдать исключение UserAuthException.
MyView (View)
private val mViewModel: MyViewModel by viewModels()
private fun getFileId() {
try {
mViewModel.requestFileId()
} catch (e: UserAuthException) {
Timber.i(e)
}
}
MyViewModel (ViewModel)
private val apiService = MyApiService()
fun requestFileId() {
viewModelScope.launch {
ApiService.requestFileId()
}
}
MyApiService (Сервисный уровень)
suspend fun requestFileId(): FileId = withContext(Dispatchers.IO) {
request.execute()
}
Вещи, на которые я смотрел
Я играл с CoroutineExceptionHandlers, supervisorJobs с не повезло, но без фундаментальных знаний о том, как все это работает, я не добьюсь никакого прогресса.
Любая помощь будет оценена, спасибо.