Plusieurs demandes de rénovation pour combiner les résultats
Im en utilisant des protections (1.9) et essayer de comprendre comment je peux appeler 2 api et de fusionner les résultats.
Je suppose que les résultats devraient être fusionnées lors de la dernière api a fini de retourner une réponse...
Comment puis-je faire cela?
Udpate, comme par Antons réponse, j'ai essayé les suivantes:
ajouté à gradle:
compile 'io.reactivex:rxjava:1.0.+'
compile 'io.reactivex:rxandroid:0.23.+'
Interface de l'Api
@GET("/maps/api/place/details/json")
Observable<PlaceDetailResult1> getPlacesFrom1( @Query("key") String key, @Query("placeid") String placeid);
@GET("api/places/{id}/ratings")
Observable<PlaceDetailResult2> getPlacesFrom2(@Path("id") String id);
Fragment
IPlaces api = adapter.create(IPlaces.class); //endpoint1
IPlaces api2 = adapter2.create(IPlaces.class); //endpoint2
Observable.combineLatest(
api.getPlacesFrom1("key", placeId),
api2.getPlacesFrom2(placeId),
new Func2<PlaceDetailResult1, PlaceDetailResult2, MergedReviews>() {
@Override
public MergedReviews call(PlaceDetailResult placeDetailResult1, PlaceDetailResult2 placeDetailResult2) {
//processToMerge( placeDetailResult1, placeDetailResult2)
return mr;
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<MergedReviews>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(MergedReviews mr) {
SetAdapter(mr.reviews);
SetPhotosAdapter(mr.photos);
}
});
Une chose peut-être intéressant de noter, quand j'ai ajouté RxJava à gradle j'ai été faire une erreur, qui s'en alla après je n'ai multiDexEnabled true
dans le gradle fichier
Utilisation RxJava avec Rénovation
est RxJava le seul moyen si l'aide de rénovation?
pour sûr, vous pouvez créer compteur global et de procéder à des résultats, lorsque le compteur atteint zéro (si vous décrémenter il après le succès de l'intervention), mais c'est douloureux, RxJava est beaucoup plus sûr, plus frais et plus facile
plus de code ajouté
est RxJava le seul moyen si l'aide de rénovation?
pour sûr, vous pouvez créer compteur global et de procéder à des résultats, lorsque le compteur atteint zéro (si vous décrémenter il après le succès de l'intervention), mais c'est douloureux, RxJava est beaucoup plus sûr, plus frais et plus facile
plus de code ajouté
OriginalL'auteur raklos | 2016-04-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser RxJava et de combiner les résultats comme ceci: En combinant les appels d'API avec RX Java
Voici tutoriel, comment utiliser RxJava et de la Modernisation 1.9: http://randomdotnext.com/retrofit-rxjava/
Avez-vous jamais vérifier le lien?
ouais, j'ai vérifié les deux, j'ai essayé de mise en œuvre, comme l'a suggéré dans le post. et le débogage Il n'aurait tout simplement pas entrer dans le onnext méthode...
Code postal, vous avez essayé
le même code mystérieusement fonctionne maintenant...
OriginalL'auteur Anton Shkurenko
Nous utilisons RxJava dans android et de les combiner de résultat. Je l'ai expliqué chaque étape
Nous allons tout d'abord définir notre objet de Rénovation pour accéder à l'API Github, puis l'installation de deux observables pour les deux demandes de réseau ci-dessus:
La Rénovation des interfaces sont assez simples:
Dernièrement, nous utilisons RxJava postal de la méthode de combiner nos deux Observables et attendre pour eux de complet avant de créer un nouveau Observable.
Quelle est la UserAndEvents? C'est juste un simple POJO de combiner les deux objets:
Enfin, nous allons appeler la méthode subscribe sur notre nouveau combiné Observables:
zip semble être de blocage, peut-on utiliser
flatMap
ou qqch comme ça?Oui, vous pouvez utiliser. C'est totalement dépendent de l'exigence
Connaissez-vous une réponse à ma question @Ramkailash stackoverflow.com/questions/44643106/...?
lors de mon côté, jette cette exception " Mauvais 3ème type d'argument. Trouvé:
rx.functions.Func2<java.lang.String,java.lang.String,managers.DataManager>', required: 'io.reactivex.functions.BiFunction<? super java.lang.String,? super java.lang.String,? extends managers.DataManager>
OriginalL'auteur Ramkailash