Próbuję skonfigurować pamięć podręczną za pomocą Retrofit 1.9.0
i OkHtttp 2.5.0
.Retrofit + RxJava nie buforuje odpowiedzi, podejrzane nagłówki odpowiedzi
Oto jak zapewnić OkHttpClient
dla mojego RestAdapter
:
@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;
}
Nie zapomnij setClient
na RestAdapter.Builder
. Upewniłem się również, że faktycznie używam instancji RestAdapter
z tym zestawem klienta.
Sprawdzane nawet jeśli pliki są tworzone w folderze "http". Oni są.
Jednak po włączeniu z WIFI i odświeżyć mój ekran skończę w OnError
zwrotnego z Observable
końcowego z tej wiadomości:
retrofit.RetrofitError: failed to connect to /10.40.31.12 (port 8888) after 10000ms: connect failed: ENETUNREACH (Network is unreachable)
ZASTRZEŻENIE: Powinienem chyba wspomnieć, że ostateczna Observable
łączy się z 5 innymi z flatMap
i zip
w drodze.
możliwy duplikat [Można dokonać modernizacji przy użyciu OKHttp użyj danych z pamięci podręcznej w trybie offline] (http://stackoverflow.com/questions/23429046/can-retrofit-with-okhttp-use-cache-data-when-offline) – njzk2