Ho 2 API a cui desidero fare richiesta in sequenza e memorizzare i loro dati in SQLite.Richieste di concatenamento in Retrofit + RxJava
Prima di tutto desidero fare richiesta all'API A
e memorizzarne i dati nella tabella SQL a
. Quindi fai richiesta all'API B
e memorizza i suoi dati nella tabella b
e alcuni dati nella tabella a_b
. I dati memorizzati in a_b
provengono dalla richiesta B
.
Come posso farlo utilizzando RxJava. Ho letto da qualche sull'utilizzo flatMap per questo, qualcosa di simile
apiService.A()
// store in DB here? How? maybe use map()?
.flatMap(modelA -> {
// or maybe store modelA in DB here?
return apiService.B().map(modelB -> {
storeInDB()l // store B here ?
return modelB;
});
});
Se non stavo usando funzioni lambda, questo apparirebbe brutto come chiamate annidate normali. È un modo migliore per farlo?
Non sapevo degli operatori 'do' di Rx. Dopo aver letto i suoi documenti, non è "doOnComplete" una funzione migliore per questo? – Sourabh
@Sourabh dipende dal tuo 'Osservabile'. Se "onComplete' viene chiamato dopo una chiamata riuscita da api, allora sì. Se il tuo 'Observable' può emettere più eventi, allora dovresti usare' doOnNext'. Nel tuo caso ('Retrofit') usare' doOnNext' e 'doOnComplete' avranno lo stesso risultato, ma in effetti' doOnComplete' potrebbe essere un po 'più intuitivo (ho usato 'doOnNext' per pura abitudine). –
Volevo dire, usare 'doOnComplete' invece di' flatMap' – Sourabh