2016-11-25 4 views
0

getShops()メソッドを呼び出すプレゼンターがあります。データ層で反応するアンドロイドとレトロフィットで複数のリクエストを作成する方法

Observable<List<Shop>> observable = interactor.getData(); 
     Subscription subscription = observable 
       .subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Subscriber<List<Shop>>() { 
        @Override 
        public void onCompleted() { 
         view.hideProgress(); 
        } 

        @Override 
        public void onError(Throwable e) { 
         super.onError(e); 
         view.hideProgress(); 
        } 

        @Override 
        public void onNext(List<Shop> shops) { 
         handleShops(shops); 
         view.onSuccess(); 
        } 
       }); 
     composite.add(subscription); 

私はレトロフィットして、サーバーに要求を行い、List<Shop>を返すインターアクターを持っています。

@Override 
public Observable<List<Shop>> getData() { 
    return api.getShops(pageNum).map(new Func1<ShopWrapper, List<Shop>>() { 
     @Override 
     public List<Shop> call(ShopWrapper wrapper) { 
      return wrapper.getShops(); 
     } 
    }); 
} 

問題は、サーバーがページごとにN店を返し、私はすべてのお店を収集し、その後、プレゼンターにObservable<List<Shop>>を返す必要があるので、私は、別のページ・パラメータを持つ複数の同一の要求を作成する必要があるということです。

私はリアクティブプログラミングを初めて、多分それを可能にするいくつかの演算子があります。

ご協力いただければ幸いです。

答えて

2

Observable.rangeconcatMapを使用してください。 上限がわからない場合は、takeUntilを条件として使用できます。

このような何か:

.flatMapIterable(shops -> shops) 
.toList(); 
0

これはObservable.concatメソッドで実現できます。

/** 
* Returns an Observable that emits the items emitted by two Observables, one after the other, without 
* interleaving them. 
*/ 

Observable<List<Shop>> observable = Observable.concat(
      interactor.getData(0), interactor.getData(1), interactor.getData(2) //and so on); 

あなたgetData方法はpageNumパラメータ受け入れる必要があります。
public Observable<List<Shop>> getData(int pageNum)

をしかし、それはあなたのニーズに気力ができませんでしたあなたの特定の質問に対する唯一の答えです。私はページの数が異なっている可能性があるので、コンカットは観測値の静的なカウントのためだけです。

あなたはそれを解決しようとする可能性がありますwith building observable recursively

+0

まさに私が再帰呼び出しの種類を作成し、観察可能なものに結果を収集する必要があります。

をあなたはtakeUntil後にこれを追加することができます呼び出すonNext一つだけをしたい場合リスト、リンクをありがとう、私はそれをチェックします。 – Yarik

関連する問題