【问题标题】:Android retofit+rxjava how to process dynamic request parameter with repeatwhenAndroid retofit+rxjava如何用repeatwhen处理动态请求参数
【发布时间】:2017-08-26 14:24:25
【问题描述】:

我使用retrofit+rxjava 来处理基本的http get 请求。并且请求将每 5 秒重复一次。 repeatwhen 完全符合要求,在请求参数不变的情况下效果很好。

在我的测试用例中,每次请求的参数都会有所不同,下面的代码不起作用。

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);

【问题讨论】:

  • 只是你提到的一个问题,你想要 GET 请求并且你正在使用带有接口的#postRequest 方法。
  • 你得到解决方案了吗?

标签: android rx-java


【解决方案1】:

您使用的东西似乎是最好的解决方案,但继续使用这种模式似乎不习惯。看看这个,让我知道你的想法!首先出现伪代码,然后我将编写真正的 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 和反应式编程的奇迹的经验,这肯定不会让我感到惊讶。

我还将上传我在解决此问题时所经历的过程的记录,并在视频准备好时将其链接起来。

Here's the video! Looking forward to knowing your thoughts and hearing your feedback.

随着时间的推移,我会在这个答案中添加注释,并且我会考虑更多的问题,但首先,没有处理取消订阅这个过程。这将无限期地持续下去,直到它所在的进程被清理干净。稍后我将在完整示例中添加对此的正确处理。

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2015-08-13
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多