android-如何获取翻新成功响应状态代码

我无法从响应中获得成功响应状态代码,例如200201等。因为我们可以从RetrofitError类(例如error.isNetworkError()error.isNetworkError())中轻松获取错误代码。是否有任何解决方法来获取状态代码?

Adarsh Yadav asked 2020-06-30T04:31:00Z
3个解决方案
75 votes

根据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(已接受)可能会导致与 在大多数情况下为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
    }
}
jhm answered 2020-06-30T04:31:40Z
17 votes

您可以在Interceptor中获取状态代码,就像在response.getStatus()中获取状态代码一样

@Override
public void success(Object object, Response response) {
    response.getStatus() // returns status code integer
}

由于成功回调中有Interceptor对象为response.getStatus()

编辑

我假设您正在使用okhttp进行改造。

okhttp有一个功能强大的工具,称为Interceptor

您可以在改造Callback之前捕获响应,并从响应中获取状态代码:

OkHttpClient client = new OkHttpClient();
client.interceptors().add(new  Interceptor(){
    @Override 
    public Response intercept(Chain chain) throws IOException{

    Request request = chain.request();
    Response response = chain.proceed(request);
    response.code()//status code
    return response;

});

// then add it to you Restclient like this:
restAdapter = new RestAdapter.Builder()
                .setEndpoint(URL_SERVER_ROOT)
                .setClient(new OkClient(client))  //plus your configurations       
                .build();

要了解有关拦截器的更多信息,请访问此处。

Ercan answered 2020-06-30T04:32:27Z
8 votes

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

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) {

    }
}

当rest api返回400等时,默认情况下将调用onFailure方法。 如果您想成功执行某项操作:(当返回200等时)

 ServiceConnector.api.getHomePage().enqueue(new SuccessCallback<Void>() {
        @Override
        public void onSuccess(Response<Void> response) {
            super.onSuccess(response);
        }
    });
Ali Gürelli answered 2020-06-30T04:32:52Z
translate from https://stackoverflow.com:/questions/31808083/how-to-get-retrofit-success-response-status-codes