Какие заголовки использовать при использовании HttpResponseCache.get

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

В исходном коде HttpResponseCache я увидел, что есть метод get, который принимает (URI, requestMethod, Map>) и возвращает cachedResponse. Я пробовал несколько разных наборов (URI, "GET", заголовки), но я не могу понять, какими будут заголовки, и каждый раз, когда я запрашиваю cachedResponse, используя get, я получаю нулевое значение, даже хотя есть кешированный ответ.

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

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

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();
            }

Извините / спасибо / Любая помощь очень ценится!

1 ответ

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

Вот как это должно быть сделано, но я еще не пробовал.

Другие вопросы по тегам