我如何让Robospice处理来自Retrofit& amp;的200响应之外的任何事情。 OKHttp是一个错误

时间:2014-03-25 11:37:18

标签: android httprequest robospice retrofit okhttp

我在Android上使用Robospice与Retrofit和OKHttp。所有工作都很好,使用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应该视为错误的错误代码。我认为它涉及添加某种自定义错误处理程序,但目前还无法找到解决方案。

1 个答案:

答案 0 :(得分:2)

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

  

问题是当服务器以401 Unauthorized响应回答时,   Callback对象调用其failure()方法..

     

当服务器返回401状态时,RetrofitError   response对象为null,networkError标志设置为true,   使应用程序无法检查   error.getResponse().getStatus()我认为错误在于http   客户。使用 OkClient 时出现此错误:java.io.IOException:   未发现身份验证挑战

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