How to retry HTTP requests with OkHttp/Retrofit?

后端 未结 13 737
一向
一向 2020-12-07 09:04

I am using Retrofit/OkHttp (1.6) in my Android project.

I don\'t find any request retry mechanism built-in to either of them. On searching more, I read OkHttp seems

13条回答
  •  情歌与酒
    2020-12-07 09:45

    For Retrofit 2.x;

    You can use Call.clone() method to clone request and execute it.

    For Retrofit 1.x;

    You can use Interceptors. Create a custom interceptor

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

    And use it while creating RestAdapter.

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

提交回复
热议问题