Sto cercando un esempio di flusso che sto cercando di implementare con l'aiuto di RxJava.Richieste di rete RxJava e memorizzazione nella cache
Supponiamo di voler mostrare un elenco di dati. Il flusso dovrebbe essere simile a questo:
- Leggere cache. Se contiene i dati, mostralo;
inviare una richiesta di API al server:
Se è tornato i dati, quindi memorizza nella cache e vederlo.
Se restituito e errore e non c'erano dati memorizzati nella cache, quindi visualizzare un errore.
Se restituito e errore e c'era qualcosa memorizzato nella cache, quindi non fare nulla.
In questo momento ho un method that does something similar (con un sacco di ispirazione da Jake's u2020). La differenza principale è che utilizza la cache in memoria, il che significa che non è necessario un separato Observable
per la lettura dalla cache e può essere eseguito in modo sincrono.
Non so come combinare due osservabili (uno per la lettura dalla cache e l'altro per la chiamata API) e ottenere il flusso descritto sopra.
Qualche suggerimento?
Sembra che tu abbia bisogno di 'amb': https://github.com/ReactiveX/RxJava/wiki/Conditional-and-Boolean-Operators#amb – zsxwing
@zsxwing potresti fornire un esempio?Sono aperto a suggerimenti, anche se ho trovato una risposta (che non è perfetta). –
Tenderei a lasciare la gestione della cache al client di rete. Se si utilizza HTTP, nella risposta sono presenti un'intestazione dedicata a indicare al client quale tipo di cache deve essere implementato, per quanto tempo deve essere conservato l'oggetto ... Senza contare che esiste anche la possibilità di verificare che la cache sia attiva ancora valido e aggiornarlo se necessario (codice di ritorno 304). – njzk2