2016-04-23 70 views
1

我已經開始使用retrofit2,rxjava和GSON,並且我在想些什麼。目前,我有這樣的事情:retrofit2每個onNext都會返回1個對象的可觀察對象

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

如果聯繫人將包含大量的信息,或者有很多在名冊接觸它會使用大量的內存。 是否有可能獲得一個可觀察的位置?所以我可以處理它,將它保存到數據庫並轉到下一個聯繫人?我知道gson支持流式傳輸,但我不知道如何將其與retrofit2結合使用。

回答

2

您可以將flatMap映射到另一個Observable,然後使用Observable.from(List)(請參閱http://reactivex.io/documentation/operators/from.html),該列表中的每個值都會爲onNext發出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 
相關問題