1. ホーム
  2. android

[解決済み] OkHttp/Retrofitを使用してHTTPリクエストを再試行するには?

2023-04-08 12:23:34

質問

AndroidプロジェクトでRetrofit/OkHttp (1.6)を使用しています。

どちらもリクエストリトライの仕組みは組み込まれていないようですね。さらに検索してみると、OkHttp には silent-retry があるようです。私の接続 (HTTP または HTTPS) のいずれでも、それが起こっているのを見たことがありません。okclientでリトライを設定する方法は?

今のところ、私は例外をキャッチし、カウンタ変数を維持する再試行しています。

どのように解決するのですか?

Retrofit 2.xの場合。

以下のように call.clone() メソッドを使用して、リクエストを複製して実行します。

Retrofit 1.xの場合。

以下のように インターセプター . カスタムインターセプターを作成する

    OkHttpClient client = new OkHttpClient();
    client.setConnectTimeout(CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
    client.setReadTimeout(READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
    client.interceptors().add(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();

            // try the request
            Response response = chain.proceed(request);

            int tryCount = 0;
            while (!response.isSuccessful() && tryCount < 3) {

                Log.d("intercept", "Request is not successful - " + tryCount);

                tryCount++;

                // retry the request
                response = chain.proceed(request);
            }

            // otherwise just pass the original response on
            return response;
        }
    });

そして、RestAdapterを作成する際に使用します。

new RestAdapter.Builder()
        .setEndpoint(API_URL)
        .setRequestInterceptor(requestInterceptor)
        .setClient(new OkClient(client))
        .build()
        .create(Adapter.class);