我正在尝试使用okhttp在缓存中保存一些网页(不是来自同一网站)。我的想法是在缓存中保存大约20-30个网页(此任务将由IntentService执行)然后,一旦用户请求查看网页,应用程序应检查它是否在缓存中(网页将是如果不是在缓存当然从互联网加载)。
使用okhttp下载html非常简单,但现在我想知道如何保存CSS以及webviewclient如何从缓存中加载页面。
在我的服务中,我编写了以下代码:
ArrayList<String> urls = intent.getStringArrayListExtra(MyFragment.RESULTS_LIST);
File cacheDir = new File(getCacheDir().getPath());
int cacheSize = 10 * 1024 * 1024; // 10 MiB
Cache cache = new Cache(cacheDir, cacheSize);
OkHttpClient client = new OkHttpClient.Builder()
.cache(cache)
.readTimeout(20, TimeUnit.SECONDS)
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.build();
for (String url : urls) {
Request request = new Request.Builder()
.url(url)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e(TAG, e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String output = response.body().string();
Log.d(TAG, output);
} else {
Log.e(TAG, "Error");
}
response.body().close();
}
});
}
}
我可以在调试中看到填充了Cache对象,但是我无法检查我的设备是否实际写入了缓存,所以我不知道WebView是否试图从缓存中读取。