Sto provando a fare il metodo di cache offline di Android utilizzando OkHttp. Il flusso è come questo:Android OkHttp come gestire ETag
- 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. - Quindi memorizzo ETag e memorizzo nella cache la risposta.
- 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:
- 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
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.
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
Il tuo server invia ETags? La cache userà 'em alle successive richieste per lo stesso URL. –
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