/ / Rxjava onNext ne déclenche pas via la mise à niveau observable - android, retrofit2, rx-android

Rxjava onNext ne déclenche pas via la mise à niveau observable - android, retrofit2, rx-android

J'ai cette interface simple d'api retrofit2 qui contient

interface Api {
@GET(BuildConfig.END_POINT) Observable<Response> fetchData();
}

Donc tout va bien quand je fais une nouvelle demande mais disons que je déclenche une requête et que je me désabonne immédiatement, puis que j'essaie de déclencher une nouvelle requête, il ne renvoie rien.

Dans le code, cela ressemble à quelque chose comme ceci:

dans Activity :: onPause, j'effectue une désinscription et dans Activity :: onResume, je relance la demande

Ma demande ressemble à quelque chose comme ça ::

api.fetchData()
.timeout(30,TimeUnit.SECONDS)
.doOnNext(new Action1<Response>() {
@Override public void call(Response response) {
list = response.getDataForList();
}
}).flatMap(new Func1<Response, Observable<List<Object>>>() {
@Override public Observable<Object>> call(Response response) {
return Observable.just(list);
}
});

Lorsque j'ai essayé de le déboguer, l'appel est effectué mais doOnNext () n'est pas appelé. Aucune des méthodes de cycle de vie n'est appelée.

Et juste pour préciser, je ne fais que renvoyer l’observable que je «sers l’utiliser ailleurs, où j’observe sur le fil principal et s’abonne sur IO.

Réponses:

2 pour la réponse № 1

N’utilisez pas doOnNext, c’est la carte. Et essayez de vous habituer à utiliser des lambdas, rendez votre code plus lisible.

api.fetchData()
.timeout(30,TimeUnit.SECONDS)
.map(response -> response.getDataForList())
.flatMap(list -> Observable.just(list));

Maintenant, comme concept, chaque fois qu'un observateurs'abonner à cet observable consomme les éléments, puis observable désabonne automatiquement l'observateur. Vous n’avez donc pas à vous soucier de rien désabonner.

Vous pouvez voir quelques exemples pratiques ici. https://github.com/politrons/reactive