Ошибка 500 не попала в обработку ошибок
Экран заказов обрабатывает только сетевой сбой:
call.enqueue(object : Callback<List<OrderDto>> {
override fun onResponse(call: Call<List<OrderDto>>, response: Response<List<OrderDto>>) {
render(response.body().orEmpty())
}
override fun onFailure(call: Call<List<OrderDto>>, t: Throwable) {
showError()
}
})
Сервер начал отвечать кодом 500. Пользователи видят пустой экран без сообщения об ошибке. Почему?
- Ответ с кодом 500 приходит как успешно выполненный вызов: обработчик сбоя ловит только сетевые проблемы
- При коде 500 тело ответа недоступно, поэтому отличить серверную ошибку от пустого списка на клиенте невозможно
- Нужно увеличить таймаут: код 500 обычно приходит, когда сервер не успевает ответить за отведённое время
- Колбэк ошибки теряется, потому что запрос выполняется в фоновом потоке, а обработчик привязан к главному
