Rx Network Polling&马上获得第一个结果

时间:2015-04-14 17:15:18

标签: retrofit rx-java

我想从我的应用程序轮询一个服务,所以我可以定期刷新数据(约15分钟)。但是,启动时也需要相同的数据。我正在使用Retrofit& RxAndroid。

我可以很容易地立即获取网络数据(或者每当呼叫返回时),我一直在努力进行这样的重复呼叫:

    return mNetworker.getInitializationProperites(deviceId)
            .observeOn(Schedulers.io()) // database i/o will need done
            .subscribeOn(Schedulers.io())
            .delay(20L, TimeUnit.SECONDS) // 20 seconds for testing
            .repeat()
            .subscribe(onNext, RxErrorHandler.handle(), onComplete);

此方法(以及使用timerinterval的其他方法)可以使时间间隔正确,但会延迟传递结果。特别是,在上面,我知道web服务立即被点击,然后等待20秒才能实际发出结果。

有没有办法可以结合ASAP& amp;还安排自己无限期重复?我的另一个想法是创建两个不同的observable并分别订阅它们,但似乎我错过了一些东西。

1 个答案:

答案 0 :(得分:1)

您可以从网络可观察的timer Observable和flatMap开始,而不是从网络可观察开始并重复它,类似

Observable.timer(0L, 20L, TimeUnit.SECONDS).flatMap(i -> doNetworkRequest())