OkHttpのリトライ無効化

状況

Retrofitで通信失敗した時にリトライしてくれてることに最近気がつきました。デフォルトで2回リトライしてくれるようです。
しかし、通信箇所によってはリトライしたくない時もあります。そんな時の対処法について調べました。

実装

OkHttpClient作成時に下記のようにretryOnConnectionFailure(false)を設定してあげるとOkHttpClientを使って通信を行う時にリトライしなくなります。

1
2
3
4
5
6
7
public static OkHttpClient createOkHttpClient(Context context) {
return new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.retryOnConnectionFailure(false)
.build();
}

補足

どんな通信エラーの時でもリトライする訳ではなく、タイムアウトなどの特定のエラーの時のみリトライするようです。
詳しくはこの辺りのコードを見ると分かります。

参考URL

https://github.com/square/okhttp/pull/1259