web-dev-qa-db-ja.com

Volleyキャッシュ管理を無効にする

Volleyキャッシュ管理を無効にする方法はありますか?私のアプリはGoogle Volleyライブラリを使用してトランスポートレイヤーを管理していますが、サーバーはCache-Controlヘッダーを使用しないため、独自のキャッシュマネージャー実装を持っています。 Volleyキャッシュが完全に役に立たないので使用しているスペースを節約したいです。

簡単な方法はありますか?または、独自のバージョンのRequestQueueを実装する必要がありますか?

どんな提案も感謝します。

27
Proverbio

Volleyに実装されているデフォルトのRequestクラス(StringRequest、JsonRequestなど)のいずれかを使用する場合、リクエストオブジェクトをvolley RequestQueueに追加する直前にsetShouldCache(false)を呼び出します。

request.setShouldCache(false);
myQueue.add(request);

Requestクラスの独自の実装がある場合は、クラスのコンストラクターでsetShouldCache(false)を呼び出すことができます。

このソリューションは、各リクエストのキャッシュを個別に無効にします。 volleyライブラリからグローバルにキャッシュを無効にする場合、RequestクラスでmShouldCache変数をfalseに永続的に設定できます。

69
Hungry Coder

コンストラクターからRequestQueueを作成し、最初のパラメーターとしてNoCacheオブジェクトを渡すことができます。 2番目のパラメーターは、AndroidHttpClientまたはHttpURLConnectionの選択に基づくネットワークトランスポートです。

RequestQueue queue = new RequestQueue(new NoCache(), new BasicNetwork(new HurlStack()));

詳細については このドキュメントを参照

ドキュメントによると、BasicNetworkはVolleyのデフォルトのネットワーク実装です。

11
Anor
_request.setShouldCache(false);
_

gETリクエストには十分ではないようです。ただし、キューに追加する前にキャッシュをクリアすると役立つようです

_myRequestQueue.getCache().clear();
_

これを私のVolleyシングルトンのgetRequestQueue()メソッドに入れました。キューを返す前。

7
Versa