2015-03-07 12 views
12

मैंने अभी rxjava का उपयोग शुरू किया और मैं अटक गया। हो सकता है कि मैं सही तरीके से rxjava का उपयोग नहीं कर रहा हूं, लेकिन इसे बनाए जाने के बाद मुझे Observable में आइटम जोड़ने की आवश्यकता है। तो मैं समझता हूं कि आप केवल Observable.just("Some", "Items") पर कॉल कर सकते हैं और ग्राहक उन्हें प्राप्त करेंगे, लेकिन अगर मेरे पास एसिंक कार्य है और मुझे कार्य समाप्त होने के बाद बाद में कुछ और आइटम जोड़ने की आवश्यकता है? मैं की तरह Observable.addItems("Some", "More", "Items")rxjava देखने योग्य वस्तुओं के बाद आइटम जोड़ें

उत्तर

21

क्या आप शायद जरूरत विषय है कुछ भी नहीं मिला - http://reactivex.io/documentation/subject.html

यह है एक वस्तु दोनों ऑब्जर्वर और नमूदार है कि, ताकि आप इसे करने के लिए सदस्यता और नए फेंकना कर सकते हैं आइटम नहीं है। उदाहरण के लिए:

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

वास्तव में जो मैं ढूंढ रहा था उसे पढ़ने में मददगार होगा ... जब मैं दस्तावेज़ पढ़ रहा था तो मैंने इस वर्ग को किसी कारण से अनदेखा कर दिया। धन्यवाद! – Jelly

+0

यदि यह कोटलिन में लोगों के लिए काम नहीं कर रहा है तो आपको यह करने की ज़रूरत है: 'वैल विषय: PublishSubject = PublishSubject.create ()' – nmu

0

यह ध्यान रखें कि PublishSubject नहीं है कैश आइटम उपयोगी है। उदाहरण के लिए यदि उपरोक्त कोड निम्न था, तो Item1 मुद्रित नहीं किया गया था क्योंकि विषय अभी तक सदस्यता नहीं लिया गया था। PublishSubject<String> subject = PublishSubject.create(); subject.onNext("Item1"); subject.subscribe(System.out::println); subject.onNext("Item2");

कैशिंग के लिए ReplaySubject का उपयोग करें। this

संबंधित मुद्दे