/ / Rxjava onNext nie odpala przez modernizację obserwowalny - Android, retrofit2, rx-android

Rxjava onNext nie wypalanie za pośrednictwem retrofit obserwowalne - android, retrofit2, rx-android

Mam ten prosty interfejs API retrofit2, który zawiera

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

Więc wszystko jest w porządku, kiedy robię nową prośbę ale powiedzmy, że odpalam żądanie i natychmiast wypisuję się z subskrypcji, a następnie próbuję uruchomić nowe żądanie, które nic nie zwraca.

W kodzie wygląda to tak:

w Activity :: onPause wykonuję subskrypcję, a w Activity :: onResume ponownie uruchamiam żądanie.

Moja prośba wygląda mniej więcej tak:

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);
}
});

Kiedy próbowałem go debugować, wywołanie zostało wykonane, ale funkcja doOnNext () nie została wywołana. Żadna z metod cyklu życia nie jest wywoływana.

I tylko dla wyjaśnienia stąd, zwracam po prostu to, co obserwowalne, którego używam gdzie indziej, gdzie obserwuję w głównym wątku i subskrybuję IO.

Odpowiedzi:

2 dla odpowiedzi № 1

Nie używaj doOnNext, po prostu mapuj. I spróbuj przyzwyczaić się do używania lambd, spraw, aby Twój kod był czytelny.

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

Teraz jako koncepcja, za każdym razem, gdy jakiś obserwatorsubskrybuj to obserwowalne, zużyj przedmioty, a następnie obserwowalne automatycznie anuluj subskrypcję obserwatora. Więc nie musisz się martwić o rezygnację z subskrypcji.

Możesz zobaczyć kilka praktycznych przykładów tutaj. https://github.com/politrons/reactive