2016-04-23 1 views
1

Я начал использовать retrofit2, rxjava и GSON, и мне было интересно что-то. В настоящее время у меня есть что-то вроде этого:retrofit2 return наблюдается с 1 объектом для каждого onNext

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

Если контакта будет содержать много информации или есть много контактов в списке он будет использовать много памяти. Можно ли получить наблюдаемую спину, где вы получаете каждый контакт в onNext один за другим? Поэтому я могу обработать его, сохранить его в базе данных и перейти к следующему контакту? Я знаю, что gson поддерживает потоковое вещание, но я не знаю, как использовать его в сочетании с retrofit2.

ответ

2

Вы можете flatMap к другому Observable, а затем использовать Observable.from (List) (см. http://reactivex.io/documentation/operators/from.html), которые испускают onNext для каждого значения в списке. Это то, что вы искали?

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); 
       } 
      }); 

ЖУРНАЛОВ ВЫВОД

FLAT MAP: call: [AAAA, BBBB, CCCC] 
MAP: call: AAAA 
SUBSCRIBER: call: AAAA 
MAP: call: BBBB 
SUBSCRIBER: call: BBBB 
MAP: call: CCCC 
SUBSCRIBER: call: CCCC 
Смежные вопросы