6
私は、OkHttpを使用してAndroidのオフラインキャッシュ方法を試行しています。フローは次のようである:Android OkHttp ETagを処理する方法
- Iサーバにヘッダーフィールド
if-none-catched
でのETag空の文字列でHTTPリクエストを送信し、サーバが適切なのETagを返します。 - 次に、ETagを格納して応答をキャッシュします。
- 次回同じサービスコールを起動すると、同じETagが取得され、HTTP要求ヘッダーに設定され、ETagが同じ場合、サーバーはHTTP 304を返します。
私の問題は、どのようにしてETagを保存して取得できるのですか? OkHttpのデフォルトが処理されるか、SQLiteにストアが必要ですか?私はGoogleでOkhttpについてETagのサンプルコードを実装していますが、私が得るのはちょうど普通のキャッシングメソッドです。私が参照リンク:
- I'm trying to use Java's HttpURLConnection to do a "conditional get", but I never get a 304 status code
- https://github.com/square/okhttp/wiki/Interceptors
- Correct way of setting up cache for OkHttp in Android
- https://gist.github.com/polbins/1c7f9303d2b7d169a3b1#file-restcontroller-java-L45
をこれまでのところ、私は達成するものは、1回目のサービスコールのための唯一のキャッシュではなく、サーバーから最新のデータを取得することはありませんもう誰かが何らかのガイダンスを提供することができれば、ETagとif-none-catch
というハンドルの良い例を見つけて、OkHttpと共有することができればと感謝します。いかなる説明も自由に聞くことができます。
コードのどの部分がokhttp応答キャッシュをオン/有効にしていますか?私はキャッシュオブジェクトを自分のokhttpClientに設定しますが、それは自分のレスポンスには影響しませんでした。私はヘッダとしてエタグを返すことさえありません。 – cloud
あなたのサーバはETagsを送信していますか?キャッシュは、同じURLに対する後続のリクエストで 'emを使用します。 –
ちょうど更新し、サーバーはETagsを送信します。今は2つの問題があります:1つは、次の要求に追加する前の応答から新しいetagを取得できません。もう一つは、私はテストのための要求ETagsをハードコードしようとすると、私は正常に応答から304を取得するが、キャッシュ応答を読み取ることができません。また、ヘッダーCache-Control "no-cache、max-age = 0"のサーバー応答も影響を受けますか? – cloud