2016-09-20 12 views
-1

動作するように観測可能ないくつかの観察可能なクラスをトリガーし、それらのすべてがいつonCompleted状態に達したかを知る必要があります。oncompletedで観測可能なターゲットを取得する

私の現在のappraochは、開始時にセットに追加することでRxJava観測値の完了を追跡することです。その後、onCompleted()メソッドが起動したときにそれらをセットから削除します。

どのようにオブザーバブルオブジェクト自体をonCompletedから取得できますか?

私はそうのようにサブスクライブ:

c.event().subscribe(this); 

そしてthisで表されるオブジェクトは、オブザーバーを実装し、onCompleted方法があります。

this.onCompleted()で観測可能なターゲットを取得するにはどうすればよいですか?


私はTassos Bassoukosの提案に応じて、以下のソリューションを試みたが、それは何もしません:

Set<Observable<Void>> obs = new HashSet<Observable<Void>>(); 
//... 
c.event().subscribe(this); 
obs.add(c.event()); 
c2.event().subscribe(this); 
obs.add(c2.event()); 
//... 
Observable.merge(obs).lastOrDefault(null).doOnNext(foo -> { 
    System.out.println("All Observers Done"); 
}); 

各観察者がonCompleted()メソッドに達しているが、すべてのオブザーバーDoneメッセージは、印刷されません。

+0

多分、長いショット、 'c.event()'? :) – marstran

+0

@marstran - 私は実際にラムダを使用して例をより短くしましたが、代わりにダムのように見えました:)私はちょうど実際の状況を反映するために質問を変更した – mtyson

+0

ああ、私は誤解したと思う。私は「オブザーバー」の代わりに「オブザーバブル」を読むと思います。 – marstran

答えて

1

私はいくつかの観察可能なクラスを起動して、それらのすべてがonCompleted状態に達したときを知る必要があります。

Observable.merge(A,B,C).lastOrDefault(null).doOnNext(dummy -> {...}) 

ソース観測は、同じ数の要素を持っていて、その結果をsomethinfを行いたい場合しかし、あなたは、機能的なスタイルを使用する場合があります:

Observable.zip(A,B,C, (a,b,c) -> {....}); 

編集:ああ、今度はそれを試してみてください:

Observable 
.merge(c1.ecent(), c2.event()) 
.doOnCompleted(() -> System.out.println("All Observers Done")) 
.subscribe(this); 
+0

私はそのショットを与えたが、期待通りの動作をしていない。更新された質問。 – mtyson

+0

なぜあなたは観測値に 'this'をサブスクライブする必要がありますか? –

+0

私はあなたのために役立つかもしれない解決策で私の答えを編集しました。 –

関連する問題