我无法从200,201等响应中获得成功响应状态代码。因为我们可以很容易地从RetrofitError
类(如error.isNetworkError()
和error.getResponse().getStatus()
获取错误代码。 是否有任何解决方法获取状态代码?
根据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); } });