3

httpResponseCacheを使用して、リクエストの一部をキャッシュしようとしています。問題は、リクエストを行う前にリクエストがキャッシュされているかどうかを知りたいということです。

HttpResponseCacheのソースで、(URI、requestMethod、Map< String、List< String > >) を受け取り、cachedResponse を返す get メソッドがあることがわかりました。(URI、「GET」、ヘッダー) のいくつかの異なるセットを試しましたが、ヘッダーが何であるかを理解できないようです。get を使用して cachedResponse を要求するたびに、null が返されます。キャッシュされた応答がありますが。

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

申し訳ありません/ありがとう/どんな助けでも大歓迎です!

4

1 に答える 1

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

それはそれが行われる方法ですが、私はまだ試していません。

于 2014-11-19T09:01:32.620 に答える