Retrofit と OkHttp を使用してキャッシュを実装しようとしています。ここで私がすでに行ったこと:
private static final Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {
@Override public Response intercept(Interceptor.Chain chain) throws IOException {
Request originalRequest = chain.request();
Request.Builder request = originalRequest.newBuilder();
Response response = chain.proceed(request.build());
return response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", "max-age=2419200")
.build();
}
};
@Provides
@Singleton
OkHttpClient provideHttpClient(Context context) {
File httpCacheDirectory = new File(context.getCacheDir(), "responses");
int cacheSize = 10 * 1024 * 1024; // 10 MiB
Cache cache = new Cache(httpCacheDirectory, cacheSize);
HttpLoggingInterceptor oggingInterceptor = new HttpLoggingInterceptor();
oggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
return new OkHttpClient.Builder()
.cache(cache)
.connectTimeout(3, TimeUnit.SECONDS)
.writeTimeout(3, TimeUnit.SECONDS)
.readTimeout(3, TimeUnit.SECONDS)
.addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)
.addInterceptor(oggingInterceptor).build();
}
次に、このインターセプターを HTTP クライアントに追加します。
.addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)
応答ディレクトリ内にファイルがありますが、インターネットに接続せずにコンテンツを読み込もうとすると、次のエラーが表示されます。
ホスト「example.com」を解決できません: ホスト名に関連付けられたアドレスがありません
http 応答をどこかに保存し、インターネット接続がない場合にロードしたいだけです。
インターネット接続があれば、キャッシュを書き換えたい。