如何获取 Retrofit 成功响应状态码
How to get Retrofit success response status codes
我无法从 200,201 等响应中获取成功响应状态代码。因为我们可以轻松地从 RetrofitError
class 中获取错误代码,例如 error.isNetworkError()
和 error.getResponse().getStatus()
。是否有获取状态代码的解决方法?
您可以在 success()
中获取状态代码,就像在 failure()
中一样
@Override
public void success(Object object, Response response) {
response.getStatus() // returns status code integer
}
因为你在成功回调中有一个 Response
对象 response.getStatus()
编辑
我假设您正在使用 okhttp 和 retrofit。
okhttp 有一个强大的工具叫做 Interceptor
您可以在改造回调之前捕获响应并从响应中获取状态代码:
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();
要了解有关拦截器的更多信息,请访问 here。
根据 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
}
}
我是通过以下代码实现的:
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 returns 400等时,默认会调用onFailure方法。如果你想做一些成功的事情:(当 returns 200 等)
ServiceConnector.api.getHomePage().enqueue(new SuccessCallback<Void>() {
@Override
public void onSuccess(Response<Void> response) {
super.onSuccess(response);
}
});
you should get exception code iin onError response
HttpException httpException =((HttpException) e).code();
我无法从 200,201 等响应中获取成功响应状态代码。因为我们可以轻松地从 RetrofitError
class 中获取错误代码,例如 error.isNetworkError()
和 error.getResponse().getStatus()
。是否有获取状态代码的解决方法?
您可以在 success()
中获取状态代码,就像在 failure()
@Override
public void success(Object object, Response response) {
response.getStatus() // returns status code integer
}
因为你在成功回调中有一个 Response
对象 response.getStatus()
编辑
我假设您正在使用 okhttp 和 retrofit。
okhttp 有一个强大的工具叫做 Interceptor
您可以在改造回调之前捕获响应并从响应中获取状态代码:
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();
要了解有关拦截器的更多信息,请访问 here。
根据 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
}
}
我是通过以下代码实现的:
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 returns 400等时,默认会调用onFailure方法。如果你想做一些成功的事情:(当 returns 200 等)
ServiceConnector.api.getHomePage().enqueue(new SuccessCallback<Void>() {
@Override
public void onSuccess(Response<Void> response) {
super.onSuccess(response);
}
});
you should get exception code iin onError response
HttpException httpException =((HttpException) e).code();