oleksandr_yefremov と skyfishjy も +1 し、json またはその他の文字列ベースの API に適した具体的で再利用可能なクラスをここで提供します。
public class CachingStringRequest extends StringRequest {
public CachingStringRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
super(method, url, listener, errorListener);
}
public CachingStringRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
super(url, listener, errorListener);
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String parsed;
try {
parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
} catch (UnsupportedEncodingException e) {
parsed = new String(response.data);
}
return Response.success(parsed, parseIgnoreCacheHeaders(response));
}
}
関数 parseIgnoreCacheHeaders() は、上記の oleksandr_yefremov の回答に由来します。CachingStringRequest クラスは、結果の json が 3 分間 (ライブ) および 24 時間 (期限切れだが利用可能) キャッシュしても問題ない場所で使用します。リクエストの例:
CachingStringRequest stringRequest = new CachingStringRequest(MY_API_URL, callback);
コールバック オブジェクトの onResponse() 関数内で、json を解析します。必要なキャッシング制限を設定します。パラメーター化して、リクエストごとにカスタムの有効期限を追加できます。
お楽しみとして、json をダウンロードし、ダウンロードした情報をレンダリングする単純なアプリでこれを試してください。最初の成功したダウンロードでキャッシュがいっぱいになったら、キャッシュがライブである間に方向を変更すると、高速なレンダリングが見られます (ライブ キャッシュ ヒットの場合、ダウンロードは発生しません)。ここでアプリを強制終了し、キャッシュ ヒットの有効期限が切れるまで 3 分間待ちます (ただし、キャッシュから削除されるまで 24 時間はかかりません)。機内モードを有効にして、アプリを再起動します。Volley エラー コールバックが発生し、「成功した」 onResponse() コールバックがキャッシュされたデータから発生するため、アプリはコンテンツをレンダリングするだけでなく、期限切れのキャッシュからのものであることを認識/警告することもできます。
この種のキャッシングの用途の 1 つは、ローダーやその他の向きの変更を処理する手段を不要にすることです。リクエストが Volley シングルトンを通過し、結果がキャッシュされる場合、向きの変更によって発生する更新は、ローダーなしで Volley によって自動的にキャッシュからすばやくレンダリングされます。
もちろん、これはすべての要件に適合するわけではありません。YMMV