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

我无法从200,201等响应中获得成功响应状态代码。因为我们可以很容易地从RetrofitError类(如error.isNetworkError()error.getResponse().getStatus()获取错误代码。 是否有任何解决方法获取状态代码?

Related of "如何获得改造成功响应状态代码"

根据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(创build)和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 } } 

你可以像failure()一样获得状态码failure()

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

因为你的Response对象成功callback为response.getStatus()

编辑

我假设你正在使用okhttp和改造。 好的,http有一个叫Interceptor的强大工具

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

 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(); 

了解更多关于拦截器访问这里 。

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

 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); } });