Я на самом деле пытается включить кэш HttpResponse в моем android.so я «ве включен мой кэш в моем главном activty в методе OnCreate путем вызова этого метода:синтаксический анализ обновления кэша Android HttpResponse?
private void enableHttpCaching()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
{
try {
File httpCacheDir = new File(getApplicationContext().getCacheDir()
, "http");
long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
HttpResponseCache.install(httpCacheDir, httpCacheSize);
} catch (IOException e) {
e.printStackTrace();
}
}
else
{
File httpCacheDir = new File(getApplicationContext().getCacheDir()
, "http");
try {
com.integralblue.httpresponsecache.HttpResponseCache.install
(httpCacheDir, 10 * 1024 * 1024);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Но я хочу, чтобы мой кэш будет обновлен, если данные сервера модифицирована я нашел эту часть кода в официальном developer.android
long currentTime = System.currentTimeMillis());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
long expires = conn.getHeaderFieldDate("Expires", currentTime);
long lastModified = conn.getHeaderFieldDate("Last-Modified", currentTime);
setDataExpirationDate(expires);
if (lastModified < lastUpdateTime) {
// Skip update
} else {
// Parse update
}
Мой вопрос состоит в том, чтобы пропустить обновление? Я имею в виду, как получить данные из кеша?
Вот мой метод getJson
public String getJSON(String url, int timeout) {
try {
URL u = new URL(url);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setRequestProperty("Content-length", "0");
int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale
c.addRequestProperty("Cache-Control", "max-stale=" + maxStale);
c.setUseCaches(true);
c.setAllowUserInteraction(false);
c.setConnectTimeout(timeout);
c.setReadTimeout(timeout);
c.connect();
int status = c.getResponseCode();
switch (status) {
case 200:
case 201:
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
// sb.append(line+"\n");
sb.append(line);
}
br.close();
return sb.toString();
}
} catch (MalformedURLException ex) {
ex.printStackTrace();
//Logger.getLogger(DebugServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
ex.printStackTrace();
//Logger.getLogger(DebugServer.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
, как вы видите, я рискую получить устаревшие данные, если данные сервера обновляются .i хотят, чтобы оптимизировать его, чтобы проверить заголовок ответа HTTP, чтобы проверить наличие обновлений
я сделал ошибку, что я ищу это обновление пропуска? Я имею в виду, как получить данные из кеша? –
Вы используете HttpResponseCache, поэтому вы можете прочитать здесь, как извлекать данные: http://developer.android.com/reference/android/net/http/HttpResponseCache.html. Также вам не нужно напрямую получать данные, они автоматически извлекаются, если данные кэшируются. Также статья об этом: http://practicaldroid.blogspot.ru/2013/01/utilizing-http-response-cache.html – artemiygrn
Вы также можете посмотреть как мой ответьте здесь. это может помочь вам. http://stackoverflow.com/questions/29517298/httpresponsecache-not-working-in-android-lollipop/41394572#41394572 –