2015-12-22 38 views
0

我很想將項目列表映射到observables,然後將每個可觀察項目flatmap與另一個函數進行處理,以將某些REST API調用的結果保存到數據庫中。FlatMapIterable截斷

API調用將正確返回所有項目。但是,flatMapIterable不會將所有項目傳遞給最後一個flatMap。

這是代碼。

restApi.getContacts(user) 
     .flatMapIterable(new Func1<List<Contact>, List<Contact>>() { 
      @Override 
      public List<Contact> call(List<Contact> contacts) { 
       return contacts; 
      } 
     } 

     .flatMap(new Func1<Contact, Observable<Integer>>() { 
      @Override 
      public Observable<Integer> call(Contact Contact) { 
       return create(Contact); 
      } 
     }) 

我不想使用doOnEach或doOnNext,我的問題是關於flatMapIterable的行爲。

任何想法,爲什麼我無法達到最後的flatmap中的所有項目?

謝謝。

+0

請確保您擁有最新的RxJava:1.0.17或1.1.0。 – akarnokd

+0

我使用1.0.14,也許可以。我會再試一次。 –

回答

1

首先,只是爲了檢查,嘗試以下

代替:

.flatMapIterable(new Func1<List<Contact>, List<Contact>>() { 
     @Override 
     public List<Contact> call(List<Contact> contacts) { 
      return contacts; 
     } 
    } 

試試這個:

.flatMap(new Func1<List<Contact>, Observable<Contact>>() { 
     @Override 
     public Observable<Contact> call(List<Contact> contacts) { 
      return Observable.from(contacts); 
     } 
    }) 

如果它不會幫助,添加以下代碼:

restApi.getContacts(user) 
     .doOnNext(new Action1<List<Contact>>() { 
      @Override 
      public void call(List<Contact> contacts) { 
       Log.i(LOG_TAG, "first doOnNext size: " + contacts.size()); 
      } 
     }) 
     .flatMapIterable(new Func1<List<Contact>, List<Contact>>() { 
      @Override 
      public List<Contact> call(List<Contact> contacts) { 
       Log.i(LOG_TAG, "flatMapIterable size: " + contacts.size()); 
       return contacts; 
      } 
     }) 
     .flatMap(new Func1<Contact, Observable<Integer>>() { 
      @Override 
      public Observable<Integer> call(Contact Contact) { 
       return create(Contact); 
      } 
     }) 
     .toList() 
     .doOnNext(new Action1<List<Integer>>() { 
      @Override 
      public void call(List<Integer> integers) { 
       Log.i(LOG_TAG, "second doOnNext size: " + contacts.size()); 
      } 
     }) 

並打印此處Logcat輸出。

+0

我會嘗試,Thnks! –