web-dev-qa-db-ja.com

Retrofit成功応答ステータスコードを取得する方法

200、201などの応答から成功応答ステータスコードを取得することはできません。など。error.isNetworkError()error.getResponse().getStatus()などのRetrofitErrorクラスからエラーコードを簡単に取得できます。ステータスコードを取得するための回避策はありますか?

44
Adarsh Yadav

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
    }
}
73
jhm

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

インターセプターの詳細については、 こちら をご覧ください。

16
Ercan

私は次のコードでそれを達成しました:

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);
        }
    });
8
Ali Gürelli