我正在开发一个项目,在该项目中,我想在返回结果之前迭代列表并合并它们。基本上我试图将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完成。你的观察结果完整吗? –