使用RxJava2定期发送相同的请求

时间:2019-05-14 19:26:14

标签: android rx-java rx-java2

因此,我有一个API调用,它返回了Dog品种的列表, 另一个调用则使用dogBreedIds,并为每个品种ID提取狗名。 在onNext中,我将这些狗名添加到列表中, 然后在doOnComplete中,将它们显示在回收站视图中。

getDogBreedsgetDogNames都返回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秒重新触发整个过程,每60秒一次,然后将响应列表与我的第一个响应进行比较,并将其显示在用户,如果响应列表具有差异(这部分可能不相关)

我尝试使用Observable.interval(),但是我无法成功执行此操作。我检查了很多例子,但都没有成功。

如果要提供更多信息,请告诉我。 谢谢!

1 个答案:

答案 0 :(得分:3)

您可以像这样间隔一下:

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

其余应保持几乎相同。

至于显示部分-我将假设您正在使用RecyclerView(如果没有,请纠正我)。如果是这样,则使用ListAdapter,DiffUtils将处理显示列表中的差异。

希望这会有所帮助!