2016-04-25 25 views
6

Sto provando a fare il metodo di cache offline di Android utilizzando OkHttp. Il flusso è come questo:Android OkHttp come gestire ETag

  1. ho inviare una richiesta HTTP con una stringa vuota ETag al campo di intestazione if-none-catched al server, e il server restituisce un ETag corretta.
  2. Quindi memorizzo ETag e memorizzo nella cache la risposta.
  3. La prossima volta che avvierò la stessa chiamata di servizio ottengo lo stesso ETag e lo imposto sull'intestazione della richiesta HTTP e il server restituirà HTTP 304 se ETag è lo stesso.

Il mio problema ora è come posso archiviare e recuperare ETag? OkHttp di default gestirà o ho bisogno di memorizzare su SQLite? Continuo a cercare su Google di OkHttp implementare il codice di esempio ETag, ma tutto ciò che ottengo è solo il normale metodo di memorizzazione nella cache. Link Io riferisco:

  1. I'm trying to use Java's HttpURLConnection to do a "conditional get", but I never get a 304 status code
  2. https://github.com/square/okhttp/wiki/Interceptors
  3. Correct way of setting up cache for OkHttp in Android
  4. https://gist.github.com/polbins/1c7f9303d2b7d169a3b1#file-restcontroller-java-L45

finora quello che ho fatto è solo la cache per il 1 ° chiamata di servizio del tempo, ma mai ottenere gli ultimi dati dal server più. Apprezzo se qualcuno può fornire indicazioni o trovato un buon esempio di gestire ETag e if-none-catch in modo dinamico per condividere con OkHttp. Qualsiasi chiarimento non esitate a chiedere.

risposta

7

Hai solo bisogno di enable OkHttp’s response cache. Userà ETag se il tuo server web ne restituisce uno.

+0

quale parte del codice attiva/abilita la cache di risposta okhttp? io setto l'oggetto cache nel mio okhttpClient ma non ha influenzato la mia risposta, e non ottengo ancora etag indietro come intestazione – cloud

+1

Il tuo server invia ETags? La cache userà 'em alle successive richieste per lo stesso URL. –

+0

ya appena aggiornato e il server invia ETags ora, ora ho 2 problemi: uno è che non riesco a ottenere il nuovo etag dalla risposta precedente per aggiungere alla prossima richiesta; un altro è che provo a richiedere gli hardcags per il test dell'ETcode, ottengo 304 dalla risposta ma non riesco a leggere la risposta della cache. E anche la risposta del server con l'intestazione Cache-Control "no-cache, max-age = 0" ha effetto? – cloud