2017-01-23 8 views
2

私はいくつかの従来のイベント発行者によって呼び出されるイベントコールバックメソッドReactXにイベントを記録するにはどうすればいいですか?

public void onSomethingHappened(Information info) { 

を持っています。

これをReactiveXで包み込みます。

これを行う方法?

UPDATE

私はPublishSubject<T>クラスを発見し、AndroidのAPIからLocationListenerをラップするために、次の方法でこれを使用:

public class LocationPublisher implements LocationListener { 


    @Override 
    public void onLocationChanged(Location location) { 
     LocationPublisher.onNext(location); 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     StatusPublisher.onNext(new BundleEx(provider, status, extras)); 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     EnablenessPublisher.onNext(new Enableness(provider, true)); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     EnablenessPublisher.onNext(new Enableness(provider, false)); 
    } 

    public final PublishSubject<Location> LocationPublisher = PublishSubject.create(); 

    public final PublishSubject<BundleEx> StatusPublisher = PublishSubject.create(); 

    public final PublishSubject<Enableness> EnablenessPublisher = PublishSubject.create(); 


    public static class Enableness { 

     private final String provider; 

     private final boolean enabled; 


     public Enableness(String provider, boolean enabled) { 
      this.provider = provider; 
      this.enabled = enabled; 
     } 

     public String getProvider() { 
      return provider; 
     } 

     public boolean isEnabled() { 
      return enabled; 
     } 
    } 


    public static class BundleEx { 

     private final String provider; 

     private final int status; 

     private final Bundle extras; 

     public BundleEx(String provider, int status, Bundle extras) { 
      this.provider = provider; 
      this.status = status; 
      this.extras = extras; 
     } 

     public String getProvider() { 
      return provider; 
     } 

     public int getStatus() { 
      return status; 
     } 

     public Bundle getExtras() { 
      return extras; 
     } 
    } 
} 

は、この正しいアプローチですか?今、私はLocationPublisherStatusPublisherEnablenessPublisherですか?

+0

あなたは基本的にはそうです、あなたはすべてのあなたのPublishSubjectsがLocationPublisher内のオブジェクトを購読することができます...観察可能な実装する任意のオブジェクトを購読することができます。もしそれが良いアプローチであれば?それは言うのが難しい...それは私のためによく見える。 –

+0

問題は誰でも公開されたサブジェクトに値をプッシュでき、RxJavaには明らかにr/oサブジェクトの概念がないことです。 – Dims

+0

r/o件名とは何ですか? –

答えて

0

あなたは概念的な観察可能なように、これらのイベントのソースを検討する、とリスナーは概念的な加入者です。

最大の不一致は、すなわち、それはそれ自身の上で終端しません、あなたはイベントの無限のソースを持っているということです。対処することは違法でも不可能でもないが、RXにとって自然ではない。

Observable.create()を使用します。 OnSubscribeは、この従来のソースにリスナーを追加するアクションです。サブスクライバのonNext()を呼び出すリスナーを実装します。

//最終のEventSourceソース= ...

Observable.create(s -> { 
    source.addFooBarListener(info -> { //could be a full anon innerclass too if more than 1 method 
    s.onNext(info); 
    }); 
}); 

私はメモリで行く、私は手持ちのコンパイラやAPIを持っていません。ごめんなさい。 もちろん正しいonComplete()/ onError()を実行するコード行がありません。

関連する問題