2017-07-14 1 views
0

J'ai cette interface APIRx Java et Retrofit appel api pour chaque élément d'appel précédent

@GET("api/..../{commentId}") 
Observable<DiscussionPostRoot> getCommentsInPost(@Path("commentId") String commentId) 

DiscussionPostRoot a un champ et la liste des objets, pour chaque objet de cette liste, je veux appeler le même appel API mais avec des valeurs différentes. Pour l'instant je faisais foreach mais les résultats de l'API arrivent à des moments différents et mon adaptateur a des valeurs aléatoires. Que faire ;) ? Je préfère des réponses sans lambda, mais de toute façon il peut y avoir lambda :)

+1

Pouvez-vous s'il vous plaît montrer à quoi il ressemble actuellement? Je ne suis pas tout à fait clair, je comprends votre description/exigence. –

Répondre

0

Si vous utilisez RxJava (et à en juger par le Observable dans votre API, vous êtes), vous pouvez le résoudre avec une certaine manipulation de flux comme ceci:

https://gist.github.com/tnovoselec/73ba4946d4116e8f05946b5e40a3a031

Quoi qu'il en soit, le point est d'abord tirer l'objet racine, puis créer un nouveau flux de celui-ci (premier flatmap), puis pour chaque objet de créer un nouveau observable pour tirer un commentaire (deuxième flatmap), et enfin recueillir tout en une liste qui peut être transmise à votre adaptateur. De plus, n'oubliez pas d'ajouter l'appel observOn() approprié pour obtenir vos résultats sur le thread de l'interface utilisateur.