2016-04-23 14 views
0

RetrofitでRxJavaを学習しようとしています。これは簡単な質問かもしれません。RxJava AndroidとRetrofitでのフックの動作

Retrofit API呼び出しでラッパーメソッドを記述したいと思います。このメソッドは、進行状況の表示と非表示を行い、コールを開始してコールの完了をポストする前にいくつかのことを行います。

これは実際に電話をかける前に、私は、進行状況ビューを表示したい、今私のserviceメソッド

@GET("/books") 
    Observable<List<Book>> getBooks(); 

です。私はエラーとonNextに呼び出すインターフェース(RequestHandler)を通過していコードに見られるよう

public <T> void execute(Observable<T> observable, final RequestHandler<T> callback) { 
    observable = observable 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()); 

    progressDialog = new TransparentProgressDialog(context, progressViewColor); 
    progressDialog.setCancelable(false); 
    dismissProgressDialog(); 
    progressDialog.show(); 

    observable.subscribe(new Observer<T>() { 
     @Override 
     public void onCompleted() { 

     } 

     @Override 
     public void onError(Throwable t) { 

      ///Handle error 
     } 

     @Override 
     public void onNext(T t) { 
      /// Call the callback 
     } 
    }); 
} 

。私はこれを得ることができます。しかし、これは通常のコールバックの実装と違いはありません。私の理解によれば、観察可能なものは連鎖可能でなければならない。しかし、私は観察可能なものが連鎖できるように実装する方法を確信していません。

誰でも私を助けることができますか?

ありがとうございました

答えて

0

よくMVPパターンについてお読みください。 要求を実行し、応答を処理するプレゼンターをいくつか作成します。このプレゼンターの内部ではBehaviourSubjectを作成し、必要に応じて、必要なブール値でonNext値を出力します。

import retrofit.Callback; 
import retrofit.RetrofitError; 
import rx.Observable; 
import rx.subjects.BehaviorSubject; 
public class TestTest { 

    public final BehaviorSubject<Boolean> progressSubject = BehaviorSubject.create(true); 
    public final Observable<SomeResponse> responseObservable; 

    public TestTest(ApiService apiService) { 

     responseObservable = apiService.performRequest(new Callback<SomeResponse>() { 
      @Override 
      public void success(SomeResponse someResponse, retrofit.client.Response response) { 
       progressSubject.onNext(false); 
      } 

      @Override 
      public void failure(RetrofitError error) { 
       progressSubject.onNext(false); 
      } 
     }); 
    } 

    public Observable<Boolean> progressObservable() { 
     return progressSubject; 
    } 
} 

そして断片/活性に「真」BehaviourSubjectの初期値であるため、上記の例では、進行が最初から表示されること

presenter.progressObservable() 
      .compose(this.<Boolean>bindToLifecycle()) 
      .subscribe(RxView.visibility(progressBar)); 

    presenter.someResponseObservable()... 

注意ようprogressObservableに加入します。 reponseObservableに登録する必要があることに注意してください。上記のコードがなければ、無限の進歩につながるでしょう。

関連する問題