4

我在带有 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 应视为错误的错误代码。我认为这涉及添加某种自定义错误处理程序,但目前确实找不到解决方案。

4

1 回答 1

2

这是由于 OKHTTP 客户端中的错误可能导致的错误

问题是当服务器回答 401 Unauthorized 响应时,回调对象调用它的 failure() 方法。

当服务器返回 401 状态时,RetrofitError 响应对象为空,并且networkError标志设置为 true,使得应用无法检查 error.getResponse().getStatus()我相信错误出在 http 客户端。使用OkClient时出现此错误:java.io.IOException: No authentication challenge found

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

于 2014-04-23T09:21:52.897 回答