2017-10-20 36 views
0

Je travaille sur une application où un utilisateur peut modifier son profil après l'enregistrement. Le problème est que la modification du profil utilise plusieurs appels d'API au backend. Un pour éditer l'email, un pour éditer le mot de passe ainsi de suite et ainsi de suite. J'utilise retrofit2 en conjonction avec RxJava donc les appels sont Observables/Singles. Un spinner est affiché lorsqu'un utilisateur appuie sur le bouton d'édition et que les appels sont exécutés sur des threads différents. Comment gérer les succès/échecs s'ils sont exécutés en parallèle? L'utilisateur a besoin de savoir si une modification a été réussie ou non et également de masquer le curseur lorsque les appels ont été terminés. Je ne peux pas utiliser combineLatest, car l'utilisateur peut choisir de ne modifier que son adresse e-mail ou sa photo de profil afin que seuls ceux qui seront appelés et pas tous.Retrofit2 traitement de réponse parallèle avec observables

Répondre

0

Je ne peux pas utiliser combineLatest parce que l'utilisateur peut choisir de ne changer que leur image e-mail ou le profil ou le nom afin que ceux-ci seront appelés et pas tous

Peut-être que vous pourriez faux l'appel de l'API.

Observable.zip(
     pictureObservable.flatmap(picture -> { 
      if (picture.isNotChanged) return Observable.just(API.SUCCESS); 
      else return api.editObservable(picture); 
     }, 
     emailObservable.flatmap(email -> { 
      if (email.isNotChanged) return Observable.just(API.SUCCESS); 
      else return api.editObservable(email); 
     }, (pictureApiResponse, emailApiResponse) -> apiResponse)); 
0

Combiner tous les appels en un seul observable à l'aide .flatMap() ou autre, et le commutateur spinner marche/arrêt .doOnSubcribe()sur et .doAfterTerminate()hors de l'observable combiné.