Как заставить Robospice рассматривать все, кроме ответа 200 от Retrofit & OKHttp, как ошибку

Я использую Robospice на Android с Retrofit и OKHttp. Все отлично работает с ответами, переданными активности с помощью Robospice RequestListener. Проблема в том, что он возвращает ошибку только в том случае, если время ожидания соединения истекло или возникла другая проблема с сетью. Если возвращается ошибка 401, то она классифицируется как успешная, но с нулевым ответом, поскольку не удалось разобрать JSON в наш POJO MobileAppSetup.

На данный момент мне нужно выполнить нулевую проверку ответа, но я понятия не имею, в чем причина, была ли это ошибка сервера или действительный 401.

public final class HTTPRequestListener implements RequestListener<MobileAppSetup> {

    @Override
    public void onRequestFailure(SpiceException spiceException) {
        Log.d("", "failure:"+ spiceException);
        loginProgress.hide();

    }

    @Override
    public void onRequestSuccess(final MobileAppSetup response) {
        Log.d("","success. Data: "+response);

        if(response==null)
            showDialog("Error logging in", "Please check your username and password and try again.", "");

        loginProgress.hide();

        postLoginProcess(response);

    }
} 

Мне нужно передать эти ошибки обратному вызову onRequestFailure, чтобы я мог правильно с этим справиться. Есть ли способ указать коды ошибок, которые Robospice должен рассматривать как ошибку. Я думаю, что это связано с добавлением какого-то пользовательского обработчика ошибок, но на данный момент я не могу найти решение.


person fraserh    schedule 25.03.2014    source источник
comment
Это действительно то, что нужно искать на форуме Retrofit, это лишь слабо связано с RS.   -  person Snicolas    schedule 12.04.2014
comment
@Snicolas это из-за ошибки клиента okhttp, лучше попробовать с новой последней версией.   -  person LOG_TAG    schedule 23.04.2014


Ответы (1)


Это связано с ошибкой в ​​клиенте OKHTTP возможная ошибка!

Проблема в том, что когда сервер отвечает 401 неавторизованными ответами, объект обратного вызова вызывает свой метод failure().

Когда сервер возвращается со статусом 401, объект ответа RetrofitError имеет значение null, а для флага networkError установлено значение true, что делает невозможным проверку приложения error.getResponse().getStatus() Я считаю, что ошибка связана с http-клиентом. При использовании OkClient я получаю следующее сообщение об ошибке: java.io.IOException: Проблемы аутентификации не найдены.

Я предлагаю вам загрузить новый jar-файл okhttp с http://square.github.io/okhttp/ и снова запустить проект! или попробуйте с любым другим клиентом вместо okhttp.

person LOG_TAG    schedule 23.04.2014