Я пытаюсь использовать HttpResponseCache, но мне не повезло, что он работает.Android HttpResponseCache не работает
Я устанавливаю это так:
SdCardManager manager = SdCardManager.getSdCardManager(context);
File dir = new File(manager.getAbsolutePathForSdCardFile(""), "http");
Log.e("Test", "Installing cache to " + dir.getAbsolutePath());
HttpResponseCache.install(dir, 10 * 1024 * 1024);
и мой код соединения:
try{
URL url = new URL(mUrl);
HttpURLConnection connection = (HttpURLConnection) ((mProxy == null) ? url
.openConnection() : url.openConnection(mProxy.getProxy()));
HttpResponseCache cache = HttpResponseCache.getInstalled();
Log.e("Test", "Req count: " + cache.getRequestCount() + " hit count " + cache.getHitCount() + " size = " + cache.size());
connection.setUseCaches(true);
connection.setDefaultUseCaches(true);
connection.addRequestProperty("Cache-Control", "max-stale=" + (60 * 60 * 24 * 28));
applyHeaders(connection);
connection.setRequestMethod("GET");
connection.setConnectTimeout(mTimeout);
connection.setReadTimeout(mTimeout);
connection.connect();
mStatusCode = connection.getResponseCode();
mStatusMessage = connection.getResponseMessage();
connection.disconnect();
}
catch (IOException ex) {
ex.printStackTrace();
return false;
}
Глядя в ADB оболочки, я вижу, каталог кэша создается и есть файл журнала. Однако, нет больше данных когда-либо отправляется в каталог:
[email protected]:/storage/emulated/legacy/Android/data/com.snip.pre/files/http $ ls
journal
Я очистить кэш после каждого запроса:
HttpResponseCache cache = HttpResponseCache.getInstalled();
cache.flush();
Любые идеи, что я делаю не так? Заголовки ответов серверов находятся здесь:
GET /imgv.oms/0.0.1fd02.a7003c2a HTTP/1.1
Cache-Control: max-stale=2419200
Authorization: Basic bWFydGlubDppc2lz
X-Loginpageredirect: none
Accept: image/*
Accept-Encoding: gzip,deflate
Accept-Language: en-GB
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.3; Galaxy Nexus Build/JWR66Y)
Host: appsdev2.server.com:81
Connection: Keep-Alive
Cookie: POSESSIONID=F8654323-f7frSyNmAGKsvE4nFXZJQIIy3Io
Есть ли что-то, что мешает его кешировать?
Вы уверены, что ваш ресурс доступен? – njzk2
Что именно определяет кешируемость? Что-то в заголовках вернулось? Я попробовал это с некоторым Json и изображением пинты, получившим тот же результат. Кроме того, одно и то же содержимое кэшируется без проблем на эквивалентном клиенте iOS. – steprobe
есть. Заголовки сервера определяют, можно ли кэшировать объект и как долго. – njzk2