Ich habe 2 APIs, die ich nacheinander anfordern und ihre Daten in SQLite speichern möchte.Verkettungsanfragen in Retrofit + RxJava
Zuerst möchte ich eine Anfrage an die API A
stellen und ihre Daten in der SQL-Tabelle a
speichern. Dann stellen Sie eine Anfrage an die API B
und speichern Sie ihre Daten in der Tabelle b
und einige Daten in der Tabelle a_b
. Die in a_b
gespeicherten Daten stammen von der Anfrage B
allein.
Wie kann ich dies mit RxJava tun. Ich habe irgendwo gelesen, über die Verwendung von flatMap dafür, so etwas wie diese
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;
});
});
Wenn ich nicht Lambda-Funktionen verwenden, dies als normale verschachtelte Anrufe als hässlich aussehen würde. Ist das ein besserer Weg?
Ich wusste nichts über 'do'-Operatoren von Rx. Ist 'doOnComplete' nach dem Lesen seiner Dokumente nicht eine bessere Funktion dafür? – Sourabh
@Sourabh es hängt von Ihrem 'Observable' ab. Wenn 'onComplete' nach einem erfolgreichen Aufruf von api aufgerufen wird, dann ja. Wenn Ihr 'Observable' mehrere Ereignisse ausgeben kann, sollten Sie' doOnNext' wählen. In Ihrem Fall ('Retrofit') wird' doOnNext' und 'doOnComplete' das gleiche Ergebnis haben, aber' doOnComplete' ist vielleicht ein bisschen intuitiver (ich habe 'doOnNext' aus reiner Gewohnheit verwendet). –
Ich meinte, benutzen 'doOnComplete' anstelle von' flatMap' – Sourabh