[解決済み】Retrofitライブラリでタイムアウトを設定する方法は?
質問
を使っています。 レトロフィット ライブラリで、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);
ユニットの詳細については 時間単位 .
関連
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] Reduxのアクションをタイムアウトでディスパッチする方法とは?
-
[解決済み】Android Studioです。jarをライブラリとして追加しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラーが報告されました。リソースの読み込みに失敗しました:サーバーは500(内部サーバーエラー)のステータスで応答しました。
-
IllegalArgumentException この例外を解決する方法
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
eclipse アクセス制限です。タイプ 'xxx' は API ではありません(必須ライブラリ '' の制限)。
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
マスキング このリソースにアクセスするには、完全な認証が必要です。
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決