我在玩RXJava,在Android系统中改装。我正在努力实现以下目标:
我需要定期调查一个电话,给我一个可观察的
一旦我得到这个列表,我想在每个交付迭代,并调用另一个方法,将给我的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);
});
这是给我的送货单。现在我想完成第二部分。
希望我说得够清楚。谢谢
我没有花太多时间使用Java8Lambdas,但下面是一个将每个对象映射到不同对象的示例,然后获得一个列表
List<Delivery> deliveries = ...;
Observable.from(deliveries).flatMap(new Func1<Delivery, Observable<ETA>>() {
@Override
public Observable<ETA> call(Delivery delivery) {
// Convert delivery to ETA...
return someEta;
}
})
.toList().subscribe(new Action1<List<ETA>>() {
@Override
public void call(List<ETA> etas) {
}
});
当然,最好能看到改装响应(可能是
可见的)
要做到这一点,您可以改为这样做(使用lambdas会更好)。您将替换
可观察的。从(交付)
在上述示例中,具有以下内容:
apiService.getDeliveries().flatMap(new Func1<List<Delivery>, Observable<Delivery>>() {
@Override
public Observable<Delivery> call(List<Delivery> deliveries) {
return Observable.from(deliveries);
}
}).flatMap(...)
最后我找到了一个很好的方法。
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;
});
}
让我们一步一步走。
它工作正常,非常好,我开始喜欢rxjava:)
我有一个方法返回一个
我试图通过将多个改型api调用链接在一起来创建一个可观察的api。这些步骤是: 使用api调用获取json对象列表 对于列表中的每个对象,进行另一个api调用以获取有关该项目的更多详细信息 将从这个新的详细对象中获取的数据写入磁盘上的文件(列表中的每个项目都会出现这种情况) 最后返回一个单独对象的可观察性,该对象要求为之前的每个对象创建一个文件 这是我到目前为止所拥有的: 请有人确认我使用了正确的
我正在使用改造从REST服务获取数据。在接收json(对象列表)后,我想为列表上的每个位置获取位图。最好的方法是什么?我试图在改造后创建的可观察对象上使用地图/平面地图,但它不起作用(或者,可能是我做错了)。 改造接口方法: 使用方法: 当我试图使用平板地图()或地图()时,它总是返回一个列表,但我需要每个项目单独。 任何帮助都将不胜感激!
执行 gradle projects 命令会为你列出子项目名称列表. 例 11.7. 收集项目信息 gradle -q projects 命令的输出结果 > gradle -q projects ------------------------------------------------------------ Root project ----------------------------
问题内容: 我正在努力实现我认为在Rx中相当简单的东西。 我有一个项目列表,我想延迟每个项目的发出。 似乎Rx delay()运算符只是将所有项目的发射偏移指定的延迟,而不是每个单独的项目。 这是一些测试代码。它将列表中的项目分组。然后,每个组应在发出之前应用延迟。 结果是: 但是我希望看到的是这样的: 我究竟做错了什么? 问题答案: 一种方法是将可观察值与可观察值结合起来以延迟输出。
执行 gradle properties 可以获取项目所有属性列表. 如下例: 例 11.16. 属性信息 gradle -q api:properties 的输出结果 > gradle -q api:properties ------------------------------------------------------------ Project :api - The shared A