RxJava->根据条件发出API请求

时间:2016-04-18 14:56:58

标签: android rx-java reactive-programming rx-android

我的要求是这样的。

  1. 点击First API获取响应。在响应中,我有一个定义状态的字段,如果设置了该标志,则进行另一个API调用并与第一个结果合并。
  2. 如果未设置标志,则返回实际响应(First Response)。
  3. 如果我使用过滤器,它会忽略错误的项目,如果没有设置标志,我不想忽略当前的响应。

    我们如何使用 RxJava,FlatMap和Filter实现这一目标?

2 个答案:

答案 0 :(得分:2)

您不需要filter。只需检查flatMap中的状态即可。如果已设置,请触发请求并致电startWith以使其与原始版本连接(您可以使用任何代码替换startWith以根据需要合并结果);如果没有,请使用just来包装响应。这是一个例子:

class MyResponse {

    boolean status;

    public MyResponse(boolean status) {
        this.status = status;
    }

    public static Observable<MyResponse> request() {
        return Observable.just(new MyResponse(false));
    }
}

Observable<MyResponse> response = Observable.just(new MyResponse(false));

response.first().flatMap(r -> {
        if (r.status) {
            return MyResponse.request().startWith(r);
        } else {
            return Observable.just(r);
        }
});

答案 1 :(得分:0)

只需使用过滤器

MyScatterPlot plot = new MyScatterPlot();
plot.drawImage();
plot.saveBufferAsImage("MyGraph.png");