Retrofit+rxjava在堆栈中的唯一请求



问题:如何使retrofit+rxjava请求唯一?例如用户可以点击很多按钮,并且会有很多请求。我想说的是,如何只发送一个请求,而其他相同的请求会自动删除。(每次只能运行一个相同的请求)

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

听起来你可以用distinct()distinct(Func1)。例如,给定一个输入框和一个按钮,您希望在用户单击按钮时获取输入框的值并执行一些网络调用:

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

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

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

最新更新