Saya mencoba menggunakan Retrofit & OKHttp untuk menyimpan tanggapan HTTP. Saya mengikuti intisari ini dan, berakhir dengan kode ini:
File httpCacheDirectory = new File(context.getCacheDir(), "responses");
HttpResponseCache httpResponseCache = null;
try {
httpResponseCache = new HttpResponseCache(httpCacheDirectory, 10 * 1024 * 1024);
} catch (IOException e) {
Log.e("Retrofit", "Could not create http cache", e);
}
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setResponseCache(httpResponseCache);
api = new RestAdapter.Builder()
.setEndpoint(API_URL)
.setLogLevel(RestAdapter.LogLevel.FULL)
.setClient(new OkClient(okHttpClient))
.build()
.create(MyApi.class);
Dan ini adalah MyApi dengan header Cache-Control
public interface MyApi {
@Headers("Cache-Control: public, max-age=640000, s-maxage=640000 , max-stale=2419200")
@GET("/api/v1/person/1/")
void requestPerson(
Callback<Person> callback
);
Pertama saya minta online dan periksa file cache. Respons dan header JSON yang benar ada di sana. Tetapi ketika saya mencoba untuk meminta offline, saya selalu mendapatkannya RetrofitError UnknownHostException
. Apakah ada hal lain yang harus saya lakukan untuk membuat Retrofit membaca respons dari cache?
EDIT:
Karena OKHttp 2.0.x HttpResponseCache
adalah Cache
, setResponseCache
adalahsetCache
Cache-Control: s-maxage=1209600, max-age=1209600
saya tidak tahu apakah itu cukup.
public
kata kunci diperlukan dalam tajuk respons untuk membuatnya berfungsi offline. Tapi, tajuk ini tidak membiarkan OkClient menggunakan jaringan saat ada. Apakah ada cara untuk mengatur kebijakan / strategi cache untuk menggunakan jaringan bila tersedia?
max-stale + max-age
disahkan, itu memang meminta dari jaringan. Tapi saya ingin mengatur max-basi seminggu. Ini membuatnya membaca respons dari cache bahkan jika ada jaringan yang tersedia.