Je travaillais sur un projet dans lequel je voulais parcourir une liste et les combiner avant de retourner les résultats. Fondamentalement, je suis en train de convertir un objet PostResponse
en Post
.RxJava2 ne recevant pas doOnNext après toList
Certains codes pertinents.
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;
}
Obtenir les messages
@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)));
}
Transform fonction appelée ci-dessus.
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();
});
}
Mais je ne reçois pas de données sur doOnNext
qui est abonnée à posts()
. Je ne sais pas ce qui ne va pas. Mes excuses si je commets une erreur vraiment idiote.
Remplacez 'postDataStore.getAllPosts()' par une source de données contenant 100% de données, par ex. Observable à partir de la liste, et vérifier. Si vous obtenez quelque chose dans 'onNext', cela signifie que votre' postDataStore' ne retourne rien – Divers
Désolé pour la confusion, j'ai édité la question afin qu'elle soit beaucoup plus claire. 'getAllPosts' émettait bien. – riteshakya037
L'opérateur 'toList()' nécessite que l'observable se termine. Est-ce que votre observable complète? –