使用 RxJava2 定期发送相同的请求
Periodically sending the same request with RxJava2
所以,我有一个 API 调用,其中 return 是一个狗品种列表,
另一个调用采用 dogBreedIds
并为每个品种 ID 获取狗名。
在 onNext
中,我将这些狗的名字添加到一个列表中,
在 doOnComplete
中,我将它们显示在回收站视图中。
getDogBreeds
和 getDogNames
return 一个 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()
,但是我没能成功。我检查了很多例子都没有成功。
如果我应该提供更多相关信息,请告诉我。
谢谢!
你可以像这样进行间隔:
Observable.interval(0, 60, TimeUnit.SECONDS)
.flatMap {
petsRepository.getDogBreeds()
}.map {...}
其余的应该几乎保持不变。
至于显示部分 - 我假设您正在使用 RecyclerView(如果不是请纠正我)。如果是,则使用 ListAdapter,DiffUtils 将处理显示列表中的差异。
希望对您有所帮助!
所以,我有一个 API 调用,其中 return 是一个狗品种列表,
另一个调用采用 dogBreedIds
并为每个品种 ID 获取狗名。
在 onNext
中,我将这些狗的名字添加到一个列表中,
在 doOnComplete
中,我将它们显示在回收站视图中。
getDogBreeds
和 getDogNames
return 一个 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()
,但是我没能成功。我检查了很多例子都没有成功。
如果我应该提供更多相关信息,请告诉我。 谢谢!
你可以像这样进行间隔:
Observable.interval(0, 60, TimeUnit.SECONDS)
.flatMap {
petsRepository.getDogBreeds()
}.map {...}
其余的应该几乎保持不变。
至于显示部分 - 我假设您正在使用 RecyclerView(如果不是请纠正我)。如果是,则使用 ListAdapter,DiffUtils 将处理显示列表中的差异。
希望对您有所帮助!