我正在開發一個項目,在該項目中,我想在返回結果之前迭代列表併合並它們。基本上我試圖將PostResponse
對象轉換爲Post
。RxJava2在toList之後沒有收到doOnNext
一些相關的代碼。
Post.java
public class Post {
@NonNull private User user;
@NonNull private String title;
@NonNull private String body;
@NonNull private Integer id;
}
PostResponse.java
public final class PostResponse{
private Integer userId;
private Integer id;
private String title;
private String body;
}
獲取帖子
@Override public Observable<List<Post>> posts() {
return postDataStore.getAllPosts()
.flatMap(postResponses -> Observable.fromIterable(postResponses)
.flatMap(postResponse -> postDataMapper.transform(postResponse))
// Receiving output here
.doOnNext(post -> Log.i(TAG, "posts: " + post))
.toList()
.toObservable()
// Not Receiving output here
.doOnNext(posts -> Log.i(TAG, "posts: " + posts)));
}
變換上述調用的函數。
public Observable<Post> transform(final PostResponse postResponse) {
return Observable.create(emitter -> {
final Post post = new Post(postResponse.getId());
post.setTitle(postResponse.getTitle());
post.setBody(postResponse.getBody());
userRepository.user(postResponse.getUserId()).doOnNext(user -> {
post.setUser(user);
emitter.onNext(post);
}).subscribe();
});
}
但我沒有收到所訂閱posts()
上doOnNext
任何數據。不知道什麼是錯的。
我很抱歉,如果我犯了一個非常愚蠢的錯誤。
用某些100%有數據的數據源替換'postDataStore.getAllPosts()',例如從列表中查看,然後檢查。如果你在'onNext'中得到了一些東西,這意味着你的'postDataStore'不會返回任何東西 – Divers
對不起,我編輯了這個問題,所以它應該更清晰。 'getAllPosts'發射很好。 – riteshakya037
'toList()'操作符要求observable完成。你的觀察結果完整嗎? –