2015-12-22 33 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! –