2016-10-08 6 views
0

Ich kann etwas sehr offensichtlich hier sein, aber in der onComplete() Methode eines Observers, wie komme ich dazu, welche Observable onComplete aufgerufen hat?RxJava: Beobachten in onComplete

Mehr Details, sagen Sie Folgendes:

event.subscribe((e) -> { 
}, 
(error) -> { 
}, 
() -> { 
// HERE - How do I tell what event source is completing? 
} 
+0

Post einige Codebeispiel, weil ich die Frage nicht verstehe. onComplete wird auf der gleichen Kette aufgerufen, die Sie die Observable – breakline

+0

@breakline hinzugefügt einige Details erstellt – mtyson

+0

Wenn ich richtig verstehe: Sie können nicht. Allerdings verstehe ich nicht, warum Sie es auch wollen. Sie können das Abonnement selbst speichern und in onCompleted darauf verweisen. Was auch immer du tun willst, du solltest es in die Kette selbst aufnehmen, da nachher dein Beobachtbares im Grunde nicht mehr existiert. – breakline

Antwort

0

'Ereignis' ist eine beobachtbare. Jeder Gegenstand, der von dem Observablen emittiert wird, wird durch die Kette von Operatoren gehen. Nachdem ein Element die Operatoren durchlaufen hat, wird es an den Abonnenten weitergeleitet, was in 'subscribe' geschieht. Abonnieren bietet zwei Überblendungen. Eine für jede Emission des Streams (Ereignisses) und die zweite für die Feststellung, dass das "Ereignis" - Beobachtbar (Stream) beendet wurde.

Schauen wir uns eine Liste an, die in ein Observable konvertiert wird. Wenn Sie ein Array zu einem beobachtbaren mit konvertieren:

Observable<Integer> integerObservable = Observable.fromArray(1, 2, 3); 

Sie erhalten für jeden Wert 1, 2, 3 OnNext im Abonnement genannt. Das Observable wird "onComplete" sein, nachdem 3 zu onNext geschoben wurde. Sehen Sie sich die Implementierung auf gitHub an, um zu sehen, was passiert.

Zurück zu Ihrer Frage: Wie kann ich feststellen, welche Ereignisquelle abgeschlossen ist? Es wäre das beobachtbare "Ereignis", weil Sie es abonnieren.

+0

Aber wie erhalten Sie einen Verweis auf das 'event' Objekt innerhalb der' onComplete() 'Methode (wo das' event' Objekt nicht ist im umschließenden Lambda-Bereich verfügbar)? – mtyson

+0

Was möchten Sie mit der Referenz machen? Vielleicht gibt es einen anderen Weg, es zu tun. –