200、201などの応答から成功応答ステータスコードを取得することはできません。など。error.isNetworkError()
やerror.getResponse().getStatus()
などのRetrofitError
クラスからエラーコードを簡単に取得できます。ステータスコードを取得するための回避策はありますか?
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
}
}
それが誰かを助けることを願っています:-)
編集:多くのアプリは、1つの句で成功(応答コード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
}
}
failure()
で行うのと同じように、ステータスコードを正常に取得できます
@Override
public void success(Object object, Response response) {
response.getStatus()//returns status code integer
}
response.getStatus()
として成功コールバックにResponse
オブジェクトがあるため
編集
Okhttpを後付けで使用していると思います。わかりましたhttpには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();
インターセプターの詳細については、 こちら をご覧ください。
私は次のコードでそれを達成しました:
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);
}
});