2014-10-07 3 views
2

Я пытаюсь использовать httpResponseCache для кэширования некоторых моих запросов. Проблема в том, что я хотел бы знать, был ли запрос кэширован перед выполнением запроса.Какие заголовки использовать при использовании HttpResponseCache.get

я видел в источнике для HttpResponseCache, что есть способ получить, что принимает (URI, requestMethod, Карта < строкового Список < String>>) и возвращает cachedResponse. Я пробовал пару разных наборов (URI, «GET», Headers), но я не могу понять, что такое заголовки, и каждый раз, когда я запрашиваю cachedResponse с помощью get, я возвращаюсь в нуль, даже хотя есть ответ, кэшированный.

Неужели кому-то удалось использовать метод get, чтобы определить, кэшируется ли запрос перед тем, как сделать запрос/в качестве альтернативы, есть ли другой способ проверить, что что-то кэшировано перед тем, как сделать запрос? Я понимаю, что я могу использовать hitCount, чтобы выяснить, был ли ответ получен из кеша, и я могу использовать «Cache-Control», «only-if-cached», чтобы заставить кешированный ответ. Я просто хотел бы проверить, если он кэширован.

Вот код, который я использовал, чтобы попытаться выполнить это. В OnCreate деятельности, я инициализировать кэш таким образом:

try { 
       File httpCacheDir = new File(this.getCacheDir(), "http"); 
       long httpCacheSize = 10 * 1024 * 1024; // 10 MiB 
       Class.forName("android.net.http.HttpResponseCache") 
         .getMethod("install", File.class, long.class) 
         .invoke(null, httpCacheDir, httpCacheSize); 
     } 
      catch (Exception httpResponseCacheNotAvailable) { 
       Log.d(TAG,"HttpResponseCache not available."); 
      } 

А затем попытаться использовать его таким образом:

HttpResponseCache cache = HttpResponseCache.getInstalled(); 
      try { 
       HashMap map = new HashMap<String, List<String>>(); 
       CacheResponse response = cache.get(URI.create(base_url), "GET", map); 
       //response is always null 
       Log.d(TAG," Response is!:"+response); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

К сожалению/спасибо/Любая помощь очень ценится!

+0

My ** cache.get ** всегда возвращает null здесь. Вы нашли решение? –

ответ

-1
HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
HttpResponseCache cache = HttpResponseCache.getInstalled(); 
cache.get(new URI(url.toString()), "GET", connection.getHeaderFields()); 

Так и должно быть, но я еще не пробовал.

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