Я пытаюсь выяснить правильный способ обработки ошибок в синхронных вызовах "Дооснащение". Я знаю, что для асинхронных вызовов Retrofit имеет обратный вызов для случая сбоя. Но как мне обрабатывать ошибку для синхронного вызова? Мое предположение заключается в завершении вызова блоком try и обработкой исключения RetrofitError в блоке catch.
Обработка ошибок при синхронном вызове с помощью Retrofit
Ответ 1
Ваша догадка кажется правильной, используя синхронные вызовы. Retrofit сделан для того, чтобы выбросить RetrofitError, представляющий ошибку: Ссылка. Обратите внимание, что throw IllegalStateException
в handleError
не должно происходить в случае синхронного вызова.
Изменить: Похоже, что Retrofit медленно переходит к версии 2.0, если вы планируете использовать Retrofit 2.0, я рекомендую прочитать документацию, чтобы увидеть, как это делается в новой версии.
Изменить pt2: Retrofit переместился в версию 2.0, и теперь, если вы хотите обрабатывать ошибки, вам больше не придется ловить RetrofitErrors, но IOException. Вы можете непосредственно взглянуть на реализацию execute()
/**
* Synchronously send the request and return its response.
*
* @throws IOException if a problem occurred talking to the server.
* @throws RuntimeException (and subclasses) if an unexpected error occurs creating the request
* or decoding the response.
*/
Response<T> execute() throws IOException;
Другие ссылки: 1
Ответ 2
Трудно это найти. Никто не говорит об обработке ошибок при синхронных вызовах. Но я кое-что нашел. Я не совсем уверен, добавлена ли следующая строка (она обязательно должна быть добавлена для пользовательских ошибок, но это не так) Я нашел здесь
Foo doFoo() throws RetroFitError;
Синхронный вызов должен происходить внутри предложения try catch следующим образом:
try{
doFoo();
}catch(RetroFitError e){
}
Найдено здесь