Обработка исключений в Coroutine KotlinAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Обработка исключений в Coroutine Kotlin

Сообщение Anonymous »

Я столкнулся с проблемой обработки исключений, возникающих в сопрограмме, в моей модели представления Android. У меня есть функция addCategory в моей CategoryViewModel, которая добавляет категорию в репозиторий. Я хочу обрабатывать исключения, возникающие во время этого процесса, и отображать сообщения об ошибках в моем пользовательском интерфейсе.
Однако, когда в сопрограмме создается исключение (например, если превышен предел категории), сообщение об ошибке регистрируется, но не отображается в пользовательском интерфейсе (такого поведения не происходит, когда срабатывает исключение «Достигнуто максимальное количество символов»). Я хочу убедиться, что сообщение об ошибке правильно передается во фрагмент и отображается в TextInputLayout.
CategoryViewModel:
class CategoryViewModel(private val categoryRepository: CategoriesRepository) : ViewModel() {
private val exceptionHandler = CoroutineExceptionHandler { coroutineContext, throwable ->
throwable.message?.let {
Log.d("Error", it)
}
}

fun addCategory(categoryName: String, categoryIconId: Int?, type: String) {
if (categoryName.length > 20) throw Exception("Maximum character limit reached")

viewModelScope.launch(exceptionHandler) {
val categoryCount = categoryRepository.getCategoryCount(null).first()
if (categoryCount >= 10) throw Exception("Maximum category limit reached")

val categoryObject = Category(name = categoryName, iconId = categoryIconId, type = type)
categoryRepository.insertCategory(categoryObject)
}
}
}

Фрагмент:
try {
categoryVM.addCategory(categoryName, iconId, type)
} catch (e: Exception) {
textInputLayout.error = e.message
}

Я пытался вызвать исключение из исключенияHandler, но это просто приводит к сбою приложения.
private val exceptionHandler = CoroutineExceptionHandler { coroutineContext, throwable ->
throwable.message?.let {
throw Exception(it)
}
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... ine-kotlin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»