2017-02-03 171 views
1

APIに順番に渡すべきオブジェクトのリストがあり、すべての呼び出しが完了したら最終的なコールバックが必要です。コード構造は次のようになりますRxJavaとAndroidを使用した複数のAPI呼び出し

//Singleton class 
public class RestAPIManager { 

    public Completable doSomething(A a) { 
     //Make API call here and return Completeable 
    } 
} 

//Class from which the above API call is made 
public class FragmentA extends Fragment { 
    List<A> aList = new ArrayList<A>; 

    //This method should return completable after all calls are made 
    private Completable callDoSomething(List<A> data) { 
     // The code that I tried 
     Observable.just(data) 
      .flatMap(new <List<A>, Observable<?>>() { 
       @Override 
       public Observable<?> call(List<A> dataList) { 
        //WHAT SHOULD BE RETURNED FROM HERE 
        for (A a : dataList) { 
         RestAPIManager.getInstance().doSomething(a)  
        } 
       } 
      }) 
      .doOnCompleted(new Action0() { 
       @Override 
       public void call() { 

       } 
      }) 
      .doOnError(new Action1<Throwable>() { 
       @Override 
       public void call(Throwable throwable) { 

       } 
      }) 
      .toCompletable(); 
    } 
} 

私はRxJavaを使い始めました。これで先に進む方法がわかりません。

答えて

1

あなたは、各項目を順番に処理するconcatMap、その後、リストを平らにするfrom演算子を使用することができますアンドロイドの使用のためにこの

public void doIt(List<String> data) { 
    final Subscription subscription = proceed(data) 
      .subscribe(new Subscriber<List<String>>() { 
       @Override 
       public void onCompleted() { 
        //final callback here 
        System.out.println("on completed"); 
       } 

       @Override 
       public void onError(Throwable e) { 
        //invokes on error 
        System.out.println("on error"); 
       } 

       @Override 
       public void onNext(List<String> strings) { 
        //invokes on items emits 
        strings.forEach(System.out::print); 
       } 
      }); 
} 

private Observable<List<String>> proceed(List<String> data) { 
    return Observable.from(data) 
      .map(RestApiManager.getInstance()::doSomething) 
      .toList(); 
} 

およびサブスクリプションによって要求の実行からの退会のようなものを

Observable.from(data) 
    .concatMap(new Func1<A, Observable<?>>() { 
     @Override 
     public Observable<?> call(A a) { 
      return RestAPIManager.getInstance().doSomething(a); 
     } 
    }) 
    .toCompletable(); 
0

を。 unsubscribe(); onStop()がリークを避けるために呼び出すとき。スケジューラを忘れないでください

関連する問題