/ / Rxjava onNext не запускається за допомогою модернізованого спостережуваного - android, retrofit2, rx-android

Rxjava onNext не стріляє за допомогою модернізованого спостережуваного - android, retrofit2, rx-android

У мене є цей простий інтерфейс api retrofit2, який містить

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

Отже, все добре, коли я роблю новий запит але нехай скаже, що я запускаю запит, і я негайно скасовую підписку, а потім намагаюся запустити новий запит, він нічого не повертає.

Отже, в коді це виглядає приблизно так:

в Activity :: onPause я виконую відмову від підписки, а в Activity :: onResume знову запускаю запит.

Мій запит виглядає приблизно так:

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

Коли я намагався його налагодити, виклик здійснюється, але doOnNext () не викликається. Жоден із методів життєвого циклу не викликається.

І лише для роз'яснення звідси я просто повертаю спостережуване, яке я використовую десь в іншому місці, де я спостерігаю в основному потоці та підписуюсь на IO.

Відповіді:

2 для відповіді № 1

Не використовуйте doOnNext, просто карту. І спробуйте використати для використання лямбда, зробіть ваш код набагато читабельнішим.

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

Тепер як концепція, кожен раз, коли якийсь спостерігачпідпишіться на цей спостережуваний споживайте предмети, потім спостережуваний автоматично скасує підписку спостерігача. Тож вам не доведеться турбуватися про те, щоб нічого не скасувати.

Деякі практичні приклади ви можете побачити тут. https://github.com/politrons/reactive