Периодически отправляя один и тот же запрос с RxJava2 - PullRequest
1 голос
/ 14 мая 2019

Итак, у меня есть вызов API, который возвращает список пород собак, и другой вызов, который принимает dogBreedIds и выбирает имена собак для каждого из этих идентификаторов породы. В onNext я добавляю эти имена собак в список, и в doOnComplete я отображаю их в виде переработчика.

И getDogBreeds, и getDogNames возвращают Observable<List> - пример цепочки rx, с которой я справляюсь:

petsRepository.getDogBreeds()
            .map { breeds ->
                breeds.items.map {
                    it.id
                }
            }
            .flatMapIterable { listOfIds -> listOfIds }
            .flatMap { dogId -> getDogNames(dogId) }
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .doOnComplete { displayDogNames() }
            .subscribe(this::onDogNamesLoaded, this::onError)

Я пытаюсь повторно запустить весь этот процесс один раз в каждые 60 секунд , а затем сравнить список ответов с первым полученным ответом и отобразить его для пользователя. если список ответов имеет различия (эта часть, возможно, не имеет значения)

Я пытался использовать Observable.interval(), однако мне не удалось это сделать. Я проверил множество примеров, но безуспешно.

Пожалуйста, дайте мне знать, если я должен предоставить больше информации по этому вопросу. Спасибо!

1 Ответ

3 голосов
/ 14 мая 2019

Вы можете перейти на такой интервал:

Observable.interval(0, 60, TimeUnit.SECONDS)
                .flatMap {
                    petsRepository.getDogBreeds()
                }.map {...}

Остальное должно оставаться почти таким же.

Что касается отображаемой части - я собираюсь предположить, что вы используете RecyclerView (поправьте меня, если нет). Если это так, то используйте ListAdapter, DiffUtils будет обрабатывать отображение различий в списках.

Надеюсь, это поможет!

...