Retrofit 1.9.0
とOkHtttp 2.5.0
でキャッシュを設定しようとしています。ここでRetrofit + RxJavaがレスポンスのキャッシュに失敗しました。レスポンスヘッダが疑わしいです
は、私は私のRestAdapter
ためOkHttpClient
を提供する方法である:
@Provides
@Singleton
public OkHttpClient provideOkHttpClient() {
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setConnectTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
okHttpClient.setReadTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
okHttpClient.setWriteTimeout(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
File cacheDir = new File(context.getCacheDir(), "http");
final Cache cache = new Cache(cacheDir, DISK_CACHE_SIZE_IN_BYTES);
okHttpClient.setCache(cache);
okHttpClient.interceptors().add(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(request);
Response finalResponse = response.newBuilder()
.header("Cache-Control", String.format("public, max-stale=%d", 604800))
.build();
Log.d("OkHttp", finalResponse.toString());
Log.d("OkHttp Headers", finalResponse.headers().toString());
return finalResponse;
}
});
return okHttpClient;
}
私はRestAdapter.Builder
上setClient
に忘れませんでした。また、実際にはこのクライアントセットでRestAdapter
のインスタンスを使用していることを確認しました。
ファイルが "http"フォルダの下に作成されているかどうかを確認します。彼らです。
retrofit.RetrofitError: failed to connect to /10.40.31.12 (port 8888) after 10000ms: connect failed: ENETUNREACH (Network is unreachable)
免責事項:私はWIFIの電源を入れて、私の画面をリロードした後
は、しかし、私はこのメッセージでObservable
エンドポイントのOnError
コールバックで終わる私はおそらく、最終Observable
は5人の他人から結合されていることを言及する必要があります途中でflatMap
とzip
があります。
[可能であれば、OKHttpでキャッシュデータを使用するとオフラインでキャッシュデータを使用できる]の複製(http://stackoverflow.com/questions/23429046/can-retrofit-with-okhttp-use-cache-data-when-offline) – njzk2