gpt4 book ai didi

android - RxJava + 改造,获取列表并为每个项目添加额外信息

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:36:52 26 4
gpt4 key购买 nike

我正在玩 RXJava,在 Android 中进行改造。我正在努力实现以下目标:

我需要定期轮询给我 Observable 的调用>(从这里我可以做到)

一旦我得到这个列表,我想在每个交付中迭代并调用另一个方法来给我 ETA(所以只是更多信息)我想将这个新信息附加到交付中并返回完整列表以及额外的每个项目都附有信息。

一旦我得到列表,我就知道如何在没有 rxjava 的情况下做到这一点,但我想练习一下。

到目前为止,这是我的代码:

pollDeliveries = Observable.interval(POLLING_INTERVAL, TimeUnit.SECONDS, Schedulers.from(AsyncTask.THREAD_POOL_EXECUTOR))
.map(tick -> RestClient.getInstance().getApiService().getDeliveries())
.doOnError(err -> Log.e("MPB", "Error retrieving messages" + err))
.retry()
.subscribe(deliveries -> {
MainApp.getEventBus().postSticky(deliveries);
});

这是给我一份交货 list 。现在我想完成第二部分。

希望我已经足够清楚了。谢谢

最佳答案

最后我找到了一个很好的方法。

private void startPolling() {
pollDeliveries = Observable.interval(POLLING_INTERVAL, TimeUnit.SECONDS, Schedulers.from(AsyncTask.THREAD_POOL_EXECUTOR))
.flatMap(tick -> getDeliveriesObs())
.doOnError(err -> Log.e("MPB", "Error retrieving messages" + err))
.retry()
.subscribe(this::parseDeliveries, Throwable::printStackTrace);
}

private Observable<List<Delivery>> getDeliveriesObs() {
return RestClient.getInstance().getApiService().getDeliveries()
.flatMap(Observable::from)
.flatMap(this::getETAForDelivery)
.toSortedList((d1, d2) -> {
if (d1.getEta() == null) {
return -1;
}
if (d2.getEta() == null) {
return 1;
}
return d1.getEta().getDuration().getValue() > d2.getEta().getDuration().getValue() ? 1 : -1;
});
}

让我们一步一步来。

  1. 首先,我们创建一个 Observable,它在每次 POLLING_INTERVAL 时间触发 getDeliveriesObs() 方法,该方法将返回最终列表
  2. 我们使用 retrofit 来获取调用的 Observable
  3. 我们使用 flatMap 来扁平化结果列表,并在下一个平面图中逐一获取 Delivery 项目。
  4. 然后我们获取Delivery对象中设置的预计到达时间并返回
  5. 我们按预计到达时间对列表进行排序。
  6. 如果出现错误,我们打印并重试,这样间隔就不会停止
  7. 我们最终订阅以对列表进行排序并在其中包含 ETA,然后我们只需返回它或您需要对其进行的任何操作。

它工作正常而且非常好,我开始喜欢 rxjava :)

关于android - RxJava + 改造,获取列表并为每个项目添加额外信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28341918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com