7

ネットワーク データを取得するための設計として、Google の Volley Library を使用しています。

RequestQueue を設定しました

requestQueue = new RequestQueue(new DiskBasedCache(new File(context.getCacheDir(), 
           DEFAULT_CACHE_DIR)), new BasicNetwork(new 
              HttpClientStack(AndroidHttpClient.newInstance(userAgent))));

また、Request をサブクラス化し、ネットワークから正常にデータが戻ってくるようにしました。私の問題はキャッシングにあります: parseNetworkResponse() で、呼び出したときに Request のサブクラスでオーバーライドされます

return Response.success(list, HttpHeaderParser.parseCacheHeaders(response));

HttpHeaderParser.parseCacheHeaders(response) は、サーバーが応答ヘッダーで「キャッシュなし」に設定されているため、null を返します... とにかく、このデータを可変セット時間 (おそらく 24 時間) の間キャッシュしたいのですが、どうすればよいですか?ボレー Cache.Entry を作成することでこれを行います... URL がキャッシュ キーの値として使用されることを理解しています (それを URL にしたいと思います)。

要約すると、HttpHeaderParser.parseCacheHeaders(response) は null を返すため、24 時間後に有効期限が切れるように設定された新しい Cache.Entry を作成し、キャッシュ キーがリクエストの URL になるようにしたいと思います。

何かご意見は?

ありがとう!

4

1 に答える 1

4

私は同じ問題を抱えており、最終的にこの解決策になりました:

@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {

    // Create a FakeCache that invalidate the data after 24 hour
    Cache.Entry mFakeCache = HttpHeaderParser.parseCacheHeaders(response);
    mFakeCache.etag = null;
    mFakeCache.softTtl = System.currentTimeMillis() + 86400 * 1000;
    mFakeCache.ttl = mFakeCache.softTtl;

    return Response.success(response.data, mFakeCache);
}
于 2013-09-11T10:53:01.800 に答える