堆栈中的retrofit + rxjava唯一请求

时间:2015-06-11 07:55:26

标签: android queue retrofit rx-java

问题:如何使改造+ rxjava请求独一无二?例如,用户可以点击很多按钮,并且会有很多请求。 所以,我的观点是,如何只发送一个请求,但其他相同的请求会自动丢弃。 (应该只运行一个相同的请求)

布尔工作的解决方案(在执行任务之前检查,此任务已经在运行),但也许有人可以建议更好,更通用的解决方案?

非常感谢。

2 个答案:

答案 0 :(得分:1)

听起来您可以使用distinct()distinct(Func1)。例如,给定一个输入框和一个按钮,如果用户点击按钮,您需要获取输入框值并进行一些网络调用:

TextBox text = ...
Button button = ...

button.clickObservable()
.map(e -> text.getText())
.distinct()
.flatMap(txt -> networkApi.someCall(txt))
.observeOn(uiScheduler)
.subscribe(...)

答案 1 :(得分:0)

这是我在当前项目中使用的解决方案。

每个请求 - 具有自定义逻辑的类。每个请求都有唯一的请求ID。每个请求都可以访问包含id和订阅类的HashMap。在开始新请求之前,我检查了map是否已包含id密钥,如果是,则有两个变体(取决于特定于请求)我可以取消订阅先前的请求并启动新请求或者只是忽略新请求的启动。