2016-04-23 10 views
1

retrofit2、rxjava、GSONの使用を開始しました。私は何か不思議でした。連絡先は、多くの情報を含んでいるでしょうか名簿の連絡先がたくさんあるretrofit2 returnオブザーバブルで1オブジェクトずつonNext

@GET("roster/byid/{userId}") 
    Observable<List<Contact>> roster(@Path("userId") int userId); 

場合、それは多くのメモリを使用します。現在、私はこのようなものを持っています。 onNextで連絡先を1つずつ取得することが可能ですか?だから私はそれを処理し、それをデータベースに保存し、次の連絡先に進むことができますか?私はgsonがストリーミングをサポートしていることを知っていますが、retrofit2と組み合わせて使用​​する方法はわかりません。

答えて

2

別のObservableにflatMapし、リスト内の各値に対してonNextを放出するObservable.from(List)(http://reactivex.io/documentation/operators/from.htmlを参照)を使用できます。それはあなたが探していたものですか?

final List<String> listString = new ArrayList<>(); 
    listString.add("AAAA"); 
    listString.add("BBBB"); 
    listString.add("CCCC"); 
    Observable.just(listString) 
      .flatMap(new Func1<List<String>, Observable<String>>() { 
       @Override 
       public Observable<String> call(List<String> strings) { 
        Log.d("FLAT MAP", "call: " + strings); 
        return Observable.from(strings); 
       } 
      }) 
      .map(new Func1<String, String>() { 
       @Override 
       public String call(String s) { 
        Log.d("MAP", "call: " + s); 
        return s; 
       } 
      }) 
      .subscribe(new Action1<String>() { 
       @Override 
       public void call(String s) { 
        Log.d("SUBSCRIBER", "call: " + s); 
       } 
      }); 

LOGS出力

FLAT MAP: call: [AAAA, BBBB, CCCC] 
MAP: call: AAAA 
SUBSCRIBER: call: AAAA 
MAP: call: BBBB 
SUBSCRIBER: call: BBBB 
MAP: call: CCCC 
SUBSCRIBER: call: CCCC 
関連する問題