2016-09-19 2 views
0

私はカスタムクラスを持っています。それはBuilderです。これには、非同期操作を実行するメソッドact()があります。操作が完了したら、私はイベントを出したい。RxJava:カスタムクラスを見る

これをRxJavaでどのように達成できますか?

私は単純なタスクのようですが、私はまだそれを行うための正しいRxJavaの方法を見ています。詳細については

、典型的なact()方法がそうのように見えるに:

class Builder 
     public void act() { 
      processRunner.runAsync(new ProcessRunner.ProcessResultHandler(){ 
       @Override 
       public void onComplete(int result) { 
        // Emit event 
       } 
      }); 
     } 

そして、何が欲しい、電話をかけ、消費クラスである:

builder.act() 

何とかonComplete()ときに警告しますが呼び出されます。


私もProcessRunnerを制御するので、私はRxJavaと連鎖結果にそれを変換したいが、今の私は、単純なユースケースを取りますよ!

答えて

1

RxJavaにPublishSubjectを使用すると可能です。ビルダーにどのように使用できるか説明しましょう。下図のようにクラスを作成します。

public class Communicator { 
    private static Communicator mCommunicator = new Communicator(); 
    private PublishSubject<Void> mGrabEvent = new PublishSubjetct.create(); 
    private Communicator(){ 
    } 
    public static getCommunicator(){ 
    return mCommunicator 
    } 
    public static emitEventItem(){ 
    // you can pass any object that you want to listen 
    mGrabEvent.onNext(null); 
    } 
public PublishSubject<Void> subscribeEvent(){ 
    return mGrabEvent; 
} 
} 

このクラスは、あなたがどこでも、あなたのアプリケーションにその特定のイベントを聴くためにそれを購読&発するように役立つだろう。以下では、そのリスナーを放出して、あなたの活動や断片にどのように誘導するかを示してみます。あなたのビルダークラス

class Builder{ 
    public void act() { 
    processRunner.runAsync(new ProcessRunner.ProcessResultHandler(){ 
     @Override 
     public void onComplete(int result) { 
     // Emit event 
     Communicatort.getCommunicator().emitEventItem(); 
     } 
    }); 
    } 
    } 

B.あなたがそれを購読することで、それに耳を傾けるだろう別のエンドポイントから発するメッセージについては

A.。

Communicatort.getCommunicator().subscribeEvent().subscribe(new Action<Void>(){ 
    @overrider 
    public void call(Void void){ 
    } 
}); 

C.最後に、アクティビティのDestroyに登録を解除する必要があります。

私はあなたを助けてくれることを願っています。あなたがいつでも理解できるかどうか教えてください。

おかげで、 Bhavdip

+1

PublishSubjectは、私はこの1つをやってしまった方法ですが、私はビルダークラス自体の上に置きます。余分な情報をありがとう、それは良いアプローチのように見えます! – mtyson

+0

被験者は誰もそれが購読されていなくても項目を放出できるということを意味する「熱心観測」です。例えば、あなたのコミュニケータは、それが聞こえていないときにアイテムを放射することができます。 –

+0

それは本当ですが、それはコミュニケータクラス内で処理できます。あなたが購読しているかどうかを確認することができます。 –

1

actメソッドからObservable<Boolean>を返す必要があります。その後、をSubscriberと呼ぶことができます。これはあなたの消費するクラスになります。

コード:クラスの消費

class Builder { 
    public Observable<Boolean> act() { 
     return Observable<Boolean>.create { 
     public void call(final Subscriber subscriber) { 
     processRunner.runAsync(new ProcessRunner.ProcessResultHandler(){ 
      @Override 
      public void onComplete(int result) { 
       subscriber.onNext(true); 
       subscriber.onCompleted(); 
      } 
     }); 
     } 
     } 
    } 
} 

 builder.act().subscribe({ 
     void onNext(boolean status) {} 
     void onCompleted() { // finished } 
     }) 

コードテストされていません。構文エラーがあります。

関連する問題