android – 如何让Robospice处理来自Retrofit和OKHttp的200响应以外的任何错误

我使用Retrofit和OKHttp在Android上使用Robospice.所有工作都很好,使用Robospice RequestListener将响应传递回活动.问题是,如果连接超时或其他网络问题,它只会返回失败.如果返回401,那么它被归类为成功但具有空响应,因为它无法将JSON解析为我们的MobileAppSetup POJO.

目前我不得不对响应进行空检查,但我不知道如果是服务器错误或有效的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应该视为错误的错误代码.我认为它涉及添加某种自定义错误处理程序,但目前还无法找到解决方案.

解决方法:

这是由于OKHTTP客户端possible bug中的错误!

Problem is When the server answers with a 401 Unauthorized responses,
the Callback object calls its failure() method..

When the server returns with the 401 status, the RetrofitError
response object is null, and the networkError flag is set to true,
making it impossible for the app to check
error.getResponse().getStatus() I believe the error lies on the http
client. When using OkClient I get this error: java.io.IOException:
No authentication challenges found

我建议你从square/okhttp下载新的okhttp jar文件再次运行项目!或尝试与任何其他客户端而不是okhttp.

上一篇:java – 为什么okhttp3.Response类是final


下一篇:OkHttp源码剥离导入到eclipse中