2014-01-29 2 views
1

Я на самом деле пытается включить кэш 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, чтобы проверить наличие обновлений

ответ

1

какой протокол вы используете? JSON, XML, что-то еще? Вам нужно разобрать InputStream из HttpURLConnection (http://docs.oracle.com/javase/tutorial/networking/urls/readingWriting.html)

Кстати, я предлагаю вам это библиотеки:

  1. для JSON - Gson (http://code.google.com/p/google-gson/).
  2. для XML - SimpleXML (http://simple.sourceforge.net/).

Также может быть полезен:

- Read/convert an InputStream to a String

+0

я сделал ошибку, что я ищу это обновление пропуска? Я имею в виду, как получить данные из кеша? –

+0

Вы используете HttpResponseCache, поэтому вы можете прочитать здесь, как извлекать данные: http://developer.android.com/reference/android/net/http/HttpResponseCache.html. Также вам не нужно напрямую получать данные, они автоматически извлекаются, если данные кэшируются. Также статья об этом: http://practicaldroid.blogspot.ru/2013/01/utilizing-http-response-cache.html – artemiygrn

+0

Вы также можете посмотреть как мой ответьте здесь. это может помочь вам. http://stackoverflow.com/questions/29517298/httpresponsecache-not-working-in-android-lollipop/41394572#41394572 –

 Смежные вопросы

  • Нет связанных вопросов^_^