Verkettung von RxJava-Observablen mit Callbacks / Listeners

7

Ich verwende Retrofit mit Observablen und möchte die Observablen verketten. Normalerweise funktioniert es gut mit Funktionen wie map() oder flatMap() , da das api ein Observable zurückgibt, das die Aufgabe erledigt. Aber in diesem Fall muss ich Folgendes tun:

  1. getKey () von api
  2. Verwenden Sie den zurückgegebenen Schlüssel in einer anderen Bibliothek Foo und warten Sie, bis der Rückruf aufgerufen wird.
  3. Wenn der Callback zurückkehrt, senden Sie das Ergebnis an api .

Ich möchte, dass es sich um einen einzelnen Anruf handelt, so dass ich mich nur einmal anmelden muss. Ich schätze, ich kann merge() oder join() oder etwas verwenden, war mir aber nicht sicher, wie der Callback am besten aussehen würde.

Gibt es eine Möglichkeit, das besser zu machen? Das habe ich bisher:

%Vor%     
hiBrianLee 16.04.2015, 15:47
quelle

3 Antworten

17

Anpassung von clemp6r's Lösung, hier ist eine weitere, die weder Subjects noch nested Subscriptions benötigt:

%Vor%

Im Allgemeinen halte ich es immer für möglich, irgendeinen Callback-basierten asynchronen Vorgang in einem Observable mit Observable.create() zu umbrechen.

    
david.mihola 16.04.2015, 18:11
quelle
4

Sie müssen ein PublishSubject verwenden, um die Callback-basierte API in eine Observable umzuwandeln.

Versuche so etwas (nicht getestet):

%Vor%     
clemp6r 16.04.2015 15:48
quelle
1
%Vor%

Beispiel für das vollständige anonyme Klassenbeispiel

Diese Implementierung passt die Antwort von david.mihola an, indem sie die Typen Single und Completable zusammen mit flatMapCompletable() verwendet, während sie typsicher / spezifisch ist.

    
ersin-ertan 26.08.2016 00:18
quelle