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

Ada*_*dav 48 android retrofit retrofit2

我无法从像200,201等..响应得到成功响应状态码,我们可以很容易地从得到错误代码RetrofitError的类象error.isNetworkError()error.getResponse().getStatus().获取状态代码有什么解决方法吗?

jhm*_*jhm 76

根据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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:许多应用程序也可以从一个子句中检查成功(响应代码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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我应该覆盖哪个班级? (2认同)
  • 我应该在哪个类中编写这个方法? (2认同)

Erc*_*can 17

您可以像访问状态一样获得状态代码 success()

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

因为你有failure()成功回调的对象Response

编辑

我假设您正在使用okhttp进行改造.ok http有一个强大的工具叫response.getStatus()

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

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();
Run Code Online (Sandbox Code Playgroud)

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


Ali*_*lli 8

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)

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

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