2016-04-12 15 views
3

Sadece ilk adımlarımı RxJava ile yapıyorum ve bu tutorial numaralı telefonu kullanıyorum. Observable'un ne olduğunu ve Subscriber'un ne olduğunu anlıyorum. Ama onları "bağladığımda" sorunlarım var. Böyle bir görevi düşündüm: Etkinlik A, bir Etkinlik B başlatır. Etkinlik B'de, geçerli tarihi içeren bir Date oluşturabileceğiniz bir düğme bulunur. Başka bir düğme bu Date'u gönderir ve Etkinlik B'yi tamamlar. Etkinlik A yayımlanan Date -Observer'a abone olur ve geçerli tarihi görüntüler. (Bunun normalde Etkinlik sonuçlarını kullanarak yapıldığını biliyorum).RxJava ile ilgili temel bilgileri anlama

I (mDate tip Date sahiptir ve Etkinlik B'de başka bir yerde oluşturulur örneği) bu kod tarafından Etkinlik B dahilinde bir Date -Observable oluşturabilir:

Observable<Date> dateObservable = 
      Observable.create(sub -> { 
     sub.onNext(mDate); 
     sub.onCompleted(); 
    }); 

Ama ben şu sorun var Etkinlik AI buna abone olmak zorunda. Ama ben ActivityB'de Gözlemlenebilir'e bir atıfta bulunmuyorum. Application sınıfımda Gözlemlenebilir'i statik olarak oluşturmayı düşündüm ama henüz mDate değerini bilmiyorum. Bir şekilde "call()" - Yöntemi (onNext() ve onCompleted()'un çağrıldığı) uygulamadan belirli bir türden Gözlemlenebilir oluşturabilir miyim? O zaman zaten benim Aativity'imde abone olabileceğim Gözlemlenebilir bir örneğim olurdu.Ve daha sonra "call()" - Yöntem B'deki Yöntem'i uygulayabilir miyim? Cevher, tarif ettiğim hedeflere ulaşmak için kullanabileceğim başka RxJava özellikleri var mı?

+0

: https://www.youtube .com/izle? v = QdmkXL7XikQ – EpicPandaForce

cevap

1

ReplaySubject adında bir şeye ihtiyacınız vardır. aramaları özel olarak

MyApplication sınıfı:

ReplaySubject<Date> dateSubject = ReplaySubject.create(); 

etkinlik B'de:

ReplaySubject<Date> subject = ((MyApplication)getApplication()).getSubject(); 
subject.onNext(mDate); 
subject.onCompleted(); 

etkinlik A'da:

ReplaySubject<Date> subject = ((MyApplication)getApplication()).getSubject(); 
subject.subscribe(...); 
Bu şey yardımcı olabilecek
+0

Teşekkürler, bu yardımcı oldu. Ama şimdi hala biraz memnun değilim. Çünkü “Uygulama” sınıfını “geçen arayüz” olarak kullanmam gerekiyor ve bundan kaçınmak istiyorum. RxJava'nın olayları bir EventBus'a göndermek için kullanılabileceğini duydum. Bunu nasıl başarabilirim? – unlimited101

+0

@ unlimited101, çoğu uygulamada olay veri yolu basitçe gözlemlenebilir. Bir 'Uygulama' yerine statik bir değişkene koyabilir ve etrafına bir sarıcı yapabilirsiniz. Bir nesneyi, farkında olduğum kadarıyla etkinlikler arasında paylaşmanın başka bir yolu yoktur. – satorikomeiji

+0

Eventbus (https://github.com/greenrobot/EventBus) ile, Hizmetler, Etkinlikler vb. Gibi Android bileşenleri arasında veri gönderebilirsiniz. Ancak bunu RxJava'da görmek isterim. – unlimited101