2016-04-23 7 views
1

Ich habe begonnen, mit Retrofit2, Rxjava und GSON und ich wunderte mich etwas. Zur Zeit habe ich so etwas wie dieses:Retrofit2 return Observable mit 1 Objekt für jeden onNext

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

Wenn ein Kontakt eine Vielzahl von Informationen oder gibt es eine Menge Kontakte in dem Register enthalten würde wäre es viel Speicher verwenden. Ist es möglich, eine beobachtbare zurück zu bekommen, wo Sie jeden Kontakt in einerNächsten eins nach dem anderen bekommen? Also kann ich es verarbeiten, in der Datenbank speichern und zum nächsten Kontakt weitergehen? Ich weiß, dass gson Streaming unterstützt, aber ich weiß nicht, wie man es in Kombination mit Retrofit2 verwendet.

Antwort

2

Sie können flatMap zu einem anderen Observable und dann Observable.from (Liste) (siehe http://reactivex.io/documentation/operators/from.html) verwenden, die OnNext für jeden Wert in der Liste ausgeben. Haben Sie danach gesucht?

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 OUTPUT

FLAT MAP: call: [AAAA, BBBB, CCCC] 
MAP: call: AAAA 
SUBSCRIBER: call: AAAA 
MAP: call: BBBB 
SUBSCRIBER: call: BBBB 
MAP: call: CCCC 
SUBSCRIBER: call: CCCC