• Non classé
  • 0

RxTips – Transformer une méthode en observable

Envie d’appeler une de vos méthode dans un enchainement d’appels Rx ?
Mais elle ne retourne pas d’Observable ? (ex: vous est fournie via une librairie)

locationManager.getMyLocation()
               .flatMap(location -> api.getListEvent(location)) //c'est ici que ça coince !
               .flatMap(listEvents -> ...

Voyons comment réparer ce préjudice !

Méthode synchrone

Si votre méthode retourne directement un résultat

public List<Event> getListEvent(Location location);

Embarquez la dans la méthode fromCallable

public Observable<List<Event>> getListEventRx(location) {
       return Observable.fromCallable(() -> 
                 api.getListEvent(location)
       );
}

Ce qui donne dans notre exemple

locationManager.getMyLocation()
               .flatMap(location -> getListEventRx(location)) //ça marche mieux 🙂
               .flatMap(listEvents -> ...

Méthode asynchrone, via Callback

Si votre méthode retourne du contenu via un Callback

public void getListEvent(Location location, Callback<List<Event>> callback);

Englobez la dans un Observable.create()

public Observable<List<Event>> getListEventRx(location) {
       return Observable.create(emitter ->
		     api.getListEvent(location, new Callback<List<Event>>() {
		            public void success(List<Event> events){
			         emitter.onNext(events);
			         emitter.onCompteted();
			    }
					
			    public void error(Throwable t){
			         emitter.onError(t);
			    }
		       })
                     );

On pourra aussi appeler notre exemple :

locationManager.getMyLocation()
               .flatMap(location -> getListEventRx(location)) //ça marche mieux 🙂
               .flatMap(listEvents -> ...

Plus d’excuse de ne pas passer à Rx 😉

Si vous ne connaissez pas RxJava, n’hésitez pas à aller faire un tour sur notre un article d’introduction sur RxJava .

Petit rappel on vient de lancer une nouvelle rubrique sur le site, où vous pouvez découvrir des livres et des Goodies Android, allez-y faire un tour 😀

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *