改造连接失败将改造错误响应返回为空

2022-09-03 06:45:54

使用 Retrofit 1.6.0、OkHTTP 2.0.0 和 OkHTTP-UrlConnection 2.0.0。

我正在使用改造到不存在的URL对服务进行开机自检。按预期调用失败回调。但是,RetrofitError 参数没有响应。我真的很想获取通过使用

error.getResponse().getStatus()

但是由于getResponse()返回null,我不能。

为什么 getResponse() 为空,如何获取状态?

谢谢。

另外,我收到的错误是 UnknownHostException,正如预期的那样。重复一遍:我期待这个错误。我想知道如何获取HTTP状态代码或为什么error.getResponse()返回null。

编辑:这是一些代码:

RestAdapterBuilderClass.java
    RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint("http://badURL.DoesntMatter/");
            .setRequestInterceptor(sRequestInterceptor)
            .setLogLevel(RestAdapter.LogLevel.FULL)
             .build();
    sService = restAdapter.create(ServiceInterface.class);

ServiceInterface.java
    @POST("/Login")
    void login(@Body JsonObject body, Callback<String> callback);

CallbackClass.java
    @Override
    public void failure(RetrofitError error) {
        if (error.getResponse() == null) {

            // error.getResponse() is null when I need to get the status code
            // from it.

            return;
        }
    }

答案 1

当您获得未知的HostException时,这意味着您无法与服务器建立连接。事实上,在这种情况下,您不能期望HTTP状态。

当然,只有当您可以连接到服务器时,您才会收到Http响应(并具有该状态)。

即使您获得 404 状态代码,您也与服务器建立了连接。这与UnknownHostException不同。

getResponse() 可以返回 null,如果你没有得到响应。


答案 2

RetrofitError 有一个调用的方法,可用于检测由于网络问题而导致的失败请求。我通常添加一个小的帮助器方法,如下所示:isNetworkError()

public int getStatusCode(RetrofitError error) {
    if (error.isNetworkError()) {
        return 503; // Use another code if you'd prefer
    }

    return error.getResponse().getStatus();
}

然后使用该结果处理任何其他故障逻辑(在 401 上注销,在 500 上显示错误消息等)。


推荐