2017-11-20 22 views
0

私はRxAndroidライブラリ+ Retrofit2を使用しています。Retrofit2 + RxAndroidはループ内で多くのリクエストを実行します

私は2つのポストの要求は:すべてのカテゴリ(リターン一覧==各ストリングは、カテゴリIDである)を取得

  1. は、私はすべての製品をロードする必要があるProductsByCategory(リストを返す)

を取得しますAppを起動するとDBに保存されます。

私はMainFragmentを作成するときに、私はすべてのカテゴリー得る:

restApiFactory.getProductService().getCategories(new CategoryRequest(initiatorId)) 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new CategoriesHandler()); 

と応答をハンドル:

@Override 
    public void onNext(CategoryResponse value) { 
     List<CategoryItem> categoryItems = value.getCategoryItems(); 
     ... 
    } 

をそして、私は別の要求(ProductsByCategory)を送る必要があるが、私はそれを行う方法を理解していませんか?

私はforeachの中でそれを送ることができます。

for (CategoryItem categoryItem : categoryItems) { 
      Observable<Products> product = ProductsByCategory... 
      } 

またはmabyいくつかの観察可能なマージがある....

を私は知りません。一般的に、これを行う方法は?サーバーへの2つの要求。 idのリストと2番目の製品が返されます。

答えて

0

あなたがこれは一例でrxjava でflaMapを使用することによって、これを達成することができますが

api.serviceA() 
     .flatMap(new Func1<FooA, Observable<FooB>>() { 
      @Override 
      public Observable<FooB> call(FooA fooA) { 
       // code to save data from service A to db 

       // call service B 
       return api.serviceB(); 
      } 
     }) 
     .subscribeOn(Schedulers.io()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(new Subscriber<FooB>() { 
      @Override 
      public void onCompleted() { 
      } 

      @Override 
      public void onError(Throwable e) { 

      } 

      @Override 
      public void onNext(FooB fooB) { 
       // code to save data from service B to db 

      } 
     }); 
+0

さらに、 'List 'を 'Observable ' – AesSedai101

+1

に変換することもできます。前回の呼び出しのリストがあり、そのリストの各要素でAPIをもう一度呼び出す必要がありますこのような; –

0

あなたは、Iterableを使用CategoryItemでAPIを呼び出すし、リストを取得するためにtoList()を使用することができ、それを実装する方法をスニペットデモンストレーションProductsByCategory

関連する問題