web-dev-qa-db-ja.com

オブザーバブルが作成された後にrxjavaがアイテムを追加する

私はrxjavaを使い始めたばかりで、行き詰まりました。たぶん、正しい方法でrxjavaを使用していないかもしれませんが、Observableを作成した後、それに項目を追加する必要があります。だから私はあなたがObservable.just("Some", "Items")を呼び出すだけでサブスクライバーがそれらを受け取ることができることを理解していますが、非同期タスクがあり、タスクが終了した後でいくつかの項目を追加する必要がある場合はどうなりますか? Observable.addItems("Some", "More", "Items")のようなものが見つかりませんでした

26
Jelly

おそらく必要なのはSubject- http://reactivex.io/documentation/subject.html

これはObserverObservableの両方のオブジェクトなので、次のことができますそれを購読し、新しいアイテムを放出してください。例えば ​​:

PublishSubject<String> subject = PublishSubject.create();
subject.subscribe(System.out::println);
subject.onNext("Item1");
subject.onNext("Item2");
41
krp

PublishSubjectはアイテムをキャッシュしないことに注意してください。たとえば、上記のコードが次の場合、サブジェクトがまだサブスクライブされていないため、_Item1_は出力されませんでした。 PublishSubject<String> subject = PublishSubject.create(); subject.onNext("Item1"); subject.subscribe(System.out::println); subject.onNext("Item2");

キャッシングにはReplaySubjectを使用します。 this を読むと参考になります

1
shobhitdutia