1. ホーム
  2. java

[解決済み】Retrofitライブラリでタイムアウトを設定する方法は?

2022-04-14 08:23:26

質問

を使っています。 レトロフィット ライブラリで、60秒のタイムアウトを設定したいのですが。Retrofitにはこれを実現する方法があるのでしょうか?

私はこのようにRetrofitを設定しました。

RestAdapter restAdapter = new RestAdapter.Builder()
    .setServer(BuildConfig.BASE_URL)
    .setConverter(new GsonConverter(gson))
    .build();

タイムアウトを設定するには?

解決方法を教えてください。

基礎となるHTTPクライアントにタイムアウトを設定することができます。クライアントを指定しない場合、Retrofitはデフォルトの接続と読み込みのタイムアウトを持つクライアントを作成します。 独自のタイムアウトを設定するには、独自のクライアントを設定し、それを RestAdapter.Builder .

オプションとして OkHttp クライアントは、同じくSquareから提供されています。

1. ライブラリの依存関係を追加する

build.gradleに、この行を入れる。

compile 'com.squareup.okhttp:okhttp:x.x.x'

どこ x.x.x は、希望するライブラリのバージョンです。

2. クライアントを設定する

例えば、60秒のタイムアウトを設定したい場合、バージョン2以前のRetrofitとバージョン3以前のOkhttpではこのようにします( 新しいバージョンについては、編集部 ):

public RestAdapter providesRestAdapter(Gson gson) {
    final OkHttpClient okHttpClient = new OkHttpClient();
    okHttpClient.setReadTimeout(60, TimeUnit.SECONDS);
    okHttpClient.setConnectTimeout(60, TimeUnit.SECONDS);

    return new RestAdapter.Builder()
        .setEndpoint(BuildConfig.BASE_URL)
        .setConverter(new GsonConverter(gson))
        .setClient(new OkClient(okHttpClient))
        .build();
}


EDIT 1

以降のokhttpのバージョンについて 3.x.x このように依存関係を設定する必要があります。

compile 'com.squareup.okhttp3:okhttp:x.x.x'

そして、builderパターンを使ってクライアントを設定します。

final OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .readTimeout(60, TimeUnit.SECONDS)
        .connectTimeout(60, TimeUnit.SECONDS)
        .build();

詳細はこちら タイムアウト


EDIT 2

以降の後付けバージョン 2.x.x もbuilderパターンを使っているので、上のreturnブロックをこれに変更します。

return new Retrofit.Builder()
    .baseUrl(BuildConfig.BASE_URL)
    .addConverterFactory(GsonConverterFactory.create())
    .client(okHttpClient)
    .build();

私のようなコードを使用する場合 providesRestAdapter メソッドを呼び出したら、メソッドの戻り値の型を レトロフィット .

詳細はこちら Retrofit 2 - 1.9からのアップグレードガイド


ps: minSdkVersionが8より大きい場合は TimeUnit.MINUTES :

okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);

ユニットの詳細については 時間単位 .