Подтвердить что ты не робот

Обработка ошибок при синхронном вызове с помощью Retrofit

Я пытаюсь выяснить правильный способ обработки ошибок в синхронных вызовах "Дооснащение". Я знаю, что для асинхронных вызовов Retrofit имеет обратный вызов для случая сбоя. Но как мне обрабатывать ошибку для синхронного вызова? Мое предположение заключается в завершении вызова блоком try и обработкой исключения RetrofitError в блоке catch.

4b9b3361

Ответ 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){

}

Найдено здесь