如何获得Retrofit成功响应状态代码

时间:2015-08-04 11:28:03

标签: android retrofit retrofit2

我无法从200,201等响应中获取成功的响应状态代码。我们可以轻松地从RetrofitError类(error.isNetworkError()error.getResponse().getStatus()获取错误代码。是否有获取状态代码的解决方法?

3 个答案:

答案 0 :(得分:69)

根据Retrofit 2.0.2,现在调用

@Override
public void onResponse(Call<YourModel> call, Response<YourModel> response) {
    if (response.code() == 200) {
       // Do awesome stuff
    } else {
       // Handle other response codes
    }
}

希望它可以帮助某人: - )

编辑:许多应用程序也可以从一个子句中检查成功(响应代码200-300),然后处理其他子句中的错误中受益,如201(已创建)和202(已接受)在大多数情况下,可能会导致相同的app逻辑为200。

@Override
public void onResponse(Call<YourModel> call, Response<YourModel> response) {
    if (response.isSuccessful()) {
       // Do awesome stuff
    } else if (response.code() == 401) {
       // Handle unauthorized
    } else {
       // Handle other responses
    }
}

答案 1 :(得分:16)

您可以像<body> <script type="text/javascript"> var clicks = 0; function onClick() { clicks += 1; document.getElementById("clicks").innerHTML = clicks; }; </script> <button type="button" onClick="onClick()">Add One To Chain</button> <p>Chain: <a id="clicks">0</a></p> </body>

中一样获得状态代码
failure()

因为 @Override public void success(Object object, Response response) { response.getStatus()//returns status code integer } 对象成功回调为Response

修改

我假设您正在使用okhttp进行改造。 ok http有一个名为response.getStatus()

的强大工具

您可以在改装之前捕获响应回调并从响应中获取状态码,如下所示:

Interceptor

要详细了解拦截器,请访问here

答案 2 :(得分:7)

我通过以下代码实现了它:

public abstract class BaseCallBack<T> {

    public abstract void onSuccess(Response<T> response);
    public abstract void onFailure(Response<T> response);
}

public abstract class SuccessCallback<T> extends BaseCallBack<T> implements Callback<T>{


    @Override
    public void onResponse(Call<T> call, Response<T> response) {

        if(response.code()>= 400 && response.code() < 599){
             onFailure(response);
        }
        else {
            onSuccess(response);
        }

    }

    @Override
    public void onFailure(Call<T> call, Throwable t){

    }

    @Override
    public void onSuccess(Response<T> response) {

    }

    @Override
    public void onFailure(Response<T> response) {

    }
}

当其余的api返回400等时,默认情况下将调用onFailure方法。如果你想成功的话:(当返回200等)

 ServiceConnector.api.getHomePage().enqueue(new SuccessCallback<Void>() {
        @Override
        public void onSuccess(Response<Void> response) {
            super.onSuccess(response);
        }
    });