我使用retrofit+rxjava来处理基本的http get请求。请求将每5秒重复一次。
在不改变请求参数的情况下,该方法能很好地满足要求。在我的测试用例中,每次请求时参数都会变化,下面的代码不起作用。
netInterface
.postRequest(requestData)
.repeatWhen(new Func1<Observable<? extends Void>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Void> observable) {
requestData.setFreeMemory(x);
return observable.just(reqeustData).delay(5, TimeUnit.SECONDS);
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.newThread())
.subscribe(this.requestSubscriber);
您已经使用了一些看起来是最佳解决方案的东西,但是继续使用这种模式似乎不符合惯例。看看这个,让我知道你的想法!先写伪代码,然后再写真正的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)的问题——正如另一位评论者指出的那样,你的问题使用了这两种方法。没烦恼!这很容易做到。我只是想确保每个读我答案的人不会像我一开始那样困惑。我将用一个快速应用测试这段代码,看看它是否有效。如果有的话,我会正确格式化代码。
这里有一个指向Android项目的链接,它应该为您提供所需的机制。代码本身存在一些小问题,因为它不是一个完美的示例,每5秒就会发射一次,但这是一个希望降低示例复杂性而不是懒惰的问题。我也很累,但这不是我要用的借口。我也要上传这个视频,这样你就可以看到我解决这个问题的整个过程。我很想知道有没有更好的办法。基于我过去对RxJava和响应式编程的体验,这一点也不会让我感到惊讶。
我也会上传我解决这个问题的过程的录音,并在视频准备好时将其链接。
这是视频!
随着时间的推移,我会给这个答案添加注释,我认为它有更多的问题,但首先,没有处理取消订阅这个过程。这将无限期地持续下去,直到包含它的进程被清理。我将在后面的完整示例中添加适当的处理。