2017-12-02 4 views
0

私はちょうどRxJava2を学び始めました。私のアプリケーションでは、firebaseを照会して、データベースにいくつかのデータを保存する必要があります。事は私がRxJavaでこれをどのように使うべきか混乱しています。私は多くの解決策があることを知ったので、私は何をいつ、いつ使うのか混乱しています。 Singleオペレータを使用しようとしましたが、成功または失敗のいずれかを発行しますが、途中でスタックしました。rxjava2を使ってバックグラウンドタスクを実行

答えて

1

これは私がそれを使用する方法です:

public abstract class AsyncCommand<T> { 


    public ObservableEmitter<T> mSubscriber; 

    public ObservableEmitter<T> getSubscriber() { 
     return mSubscriber; 
    } 

    public abstract T run() throws Exception; 

    public Observable<T> returnObservable() { 
     return Observable.create(
       new ObservableOnSubscribe<T>() { 
        @Override 
        public void subscribe(ObservableEmitter<T> subscriber) throws Exception { 
         mSubscriber = subscriber; 
         try { 
          subscriber.onNext(run()); 
          subscriber.onComplete(); 
         } catch (Exception e) { 
          subscriber.onError(e); 
         } 
        } 
       } 
     ).subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()); 
    } 
} 

と、Util.doesHostExist(mEmail)は、このサンプルではIOスレッドで実行されます: まず、私は抽象クラスを作成

class VerifiyEmailDomain extends AsyncCommand<Boolean> { 
    private final Context mContext; 
    private final String mEmail; 

    public VerifiyEmailDomain(Context context, String email) { 
     mContext = context; 
     mEmail = email; 
    } 

    @Override 
    public Boolean run() throws Exception { 
     return Util.doesHostExist(mEmail); 
    } 
} 
これを使用するには

verifiyEmailDomain(context, email).subscribe(new Consumer<Boolean>() { 
      @Override 
      public void accept(Boolean result) throws Exception { 
       //do stuff in normal case 
     }, new Consumer<Throwable>() { 
      @Override 
      public void accept(Throwable throwable) throws Exception { 
       // do stuff if exception occurs 
      } 
     }); 
+0

代わりObservable.createを使用しての、あなただけのためにObservable.fromCallableの内側にそれをラップすることができますより簡単な実装 – Tuby

関連する問題