私はリストを反復し、結果を返す前にそれらを結合したいプロジェクトで作業していました。基本的には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
上の任意のデータを受信していませんよ。何が間違っているか分かりません。
私が本当にばかげた間違いをしている場合、私の謝罪。私は、デザインとロジックを再考することをお勧めします、
emitter.onComplete();
右あなたのemitter.onNext(post);
後しかし:
'postDataStore.getAllPosts()'を、100%にデータがある何らかのデータソースで置き換えます。リストから見て、チェックしてください。 'onNext'で何かを取得した場合は、' postDataStore'が何も返さないことを意味します。 – Divers
混乱して申し訳ありません。私は質問を編集して、はるかに明確にする必要があります。 'getAllPosts'はうまくいっていました。 – riteshakya037
'toList()'演算子は、observableが完了することを必要とします。あなたの観測は完全ですか? –