Combinazione di RxJava e RxAndroid?

Il mio scenario è molto simile a questa image:

immettere qui la descrizione dell'immagine

  • Come si ottiene un object Disegnabile da un ID risorsa in pacchetto android?
  • Android Crosswalk Lite - integrazione di Android Studio
  • Come aggiungere un widget alla schermata iniziale di Android dalla mia app?
  • I widget configurati con android: configure riceveranno onUpdate anche se la configuration è incompleta
  • RecyclerVIew onItemClickListener Non funziona
  • Come visualizzare e impostare l'evento clic su Freccia indietro sulla barra degli strumenti
  • Il stream dell'app è così:

    1. Visualizza deve essere aggiornato.
    2. Crea un osservabile utilizzando RxAndroid per recuperare i dati dal file cache / locale.
    3. aggiornare la vista.
    4. Effettuare un'altra chiamata di networking utilizzando Retrofit e RxJava per aggiornare nuovamente la visualizzazione con nuovi dati provenienti dai servizi web.
    5. Aggiorna il file locale con i nuovi dati.

    Quindi, aggiorni la vista due volte (uno dal file locale e subito dopo tramite i webservices)

    Come posso get il risultato utilizzando RxJava e RxAndroid ? Quello che stavo pensando è

    1. Crea un osservabile1 per get i dati dal file system locale.
    2. Nel metodo onNext di observable1 posso creare un altro observable2 .
    3. observable2.onNext() Posso aggiornare il file locale. Ora Come faccio ad aggiornare la view con i dati aggiornati (caricati nel file)?

    Qual è il buon approccio?

  • Invocazione di Adobe Reader dall'interno dell'applicazione Android
  • Quale formato h.264 carica su ANDROID e IOS?
  • Perché la vista viene trascinata con il reset di ViewDragHelper nella sua posizione originale sul layout ()?
  • Pinch Zoom in android per un'image?
  • Android: Carica i file di grandi size utilizzando MultipartEntity
  • Come get Direzione in Android (come il Nord, Ovest)
  • 2 Solutions collect form web for “Combinazione di RxJava e RxAndroid?”

    Ho scritto un post sul blog proprio su questo stesso scenario. Ho usato l'operatore di unione (come suggerito da sockeqwe) per affrontare in parallelo i tuoi punti '2' e '4' e doOnNext per indirizzo '5':

     // NetworkRepository.java public Observable<Data> getData() { // implementation } // DiskRepository.java public Observable<Data> getData() { // implementation } // DiskRepository.java public void saveData(Data data) { // implementation } // DomainService.java public Observable<Data> getMergedData() { return Observable.merge( diskRepository.getData().subscribeOn(Schedulers.io()), networkRepository.getData() .doOnNext(new Action1<Data>() { @Override public void call(Data data) { diskRepository.saveData(data); // <-- save to cache } }).subscribeOn(Schedulers.io()) ); } 

    Nel mio post sul blog ho inoltre utilizzato il filter e il timestamp per ignorare l'aggiornamento dell'interface utente se i dati sono uguali o se la cache è vuota (non è stato specificato questo ma probabilmente si esegue anche in questo problema).

    Link al post: https://medium.com/@murki/chaining-multiple-sources-with-rxjava-20eb6850e5d9

    Sembra che l'operatore di concat o unire è quello che stai cercando

    La differenza tra loro è:

    L'unione può interblocare gli elementi emessi dagli Osservati uniti (un operatore simile, Concat, non interpola gli elementi, ma emette tutte le voci di ciascuna sorgente Observable a turno prima di iniziare a emettere oggetti dalla sorgente successiva Osservabile).

     Observable retroFitBackendObservable = retrofitBackend.getFoo().doOnNext(save_it_into_local_file ); Observable mergedObservable = Observable.merge(cacheObservable, retroFitBackendObservable); mergedObservable.subscribe( ... ); 

    Quindi abbonati a mergedObservable e aggiornate la vista in onNext()

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.