我使用retrofit + rxjava来处理基本的http get请求。请求将每5秒重复一次。 repeatWhen完全符合要求,并且在请求参数永不改变的情况下运行良好。
在我的测试用例中,每次请求时参数都会有所不同,下面的代码不起作用。
version.xml
答案 0 :(得分:0)
您已经使用了似乎是最佳解决方案的东西,但继续使用此模式似乎并非惯用。看看这个,让我知道你的想法! Psuedo代码首先出现,然后我将编写真正的Java。只是想在新鲜的时候把想法弄清楚!
Observable.combineLatest(getTextToGetObservable, Observable.interval(5, SECONDS)
.subscribe(netInterface::postRequest)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this.requestSubscriber);
另请注意,您可能需要查看subscribeOn / observeOn逻辑。它现在可能不会引起任何问题,但它可能并不一定会出现惯用。
所以,虽然我的回答并没有完全回答你关于如何使用repeatWhen解决这个问题的问题,但我希望这个答案可以帮助你解决你提出请求的问题(GET或POST - 正如另一位评论者指出的那样) ,你的问题同时使用了。不用担心!这很容易做到。我只是想确保每个读我答案的人都不像我最初那样困惑。我要测试一下使用快速应用程序的代码并查看它是否有效。如果代码正确,我将正确格式化代码。
Here is a link to the Android project that should provide you with the mechanisms needed to get going.代码中存在一些小问题,因为它不是每5秒展示一次发射的完美示例,但这是一个希望降低示例复杂性的问题,而不是懒。我也很累,但那不是我将要在这里使用的借口。我还要上传此视频,以便您了解我在解决问题时所经历的整个过程。很想知道是否有更好的方法。基于我过去对RxJava和Reactive Programming奇迹的经验,我当然不会让我感到惊讶。
我还将上传我在解决此问题时所经历的流程的录制,并在视频准备就绪时将其链接起来。
Here's the video! Looking forward to knowing your thoughts and hearing your feedback.
随着时间的推移,我会在这个答案中添加注释,并且我会考虑更多的错误,但是对于其中一个,没有处理取消订阅这个过程。这将无限期地继续,直到清除它的过程。我将在稍后的完整示例中添加适当的处理。