使用RxJava使用ambWith和mergeWith定期进行Retrofit请求?

时间:2018-02-08 04:30:43

标签: retrofit rx-java retrofit2 rx-java2

我想在Android应用中使用RxJava实现重复的http请求,并满足以下要求:

  1. 请求应每2秒发出一次。

  2. 请求最多每2秒发出一次。

  3. 如果请求在2秒后超时,我们应该取消请求。

  4. 这是我的RestService:

    public interface RestService {    
        @GET("name")
        Single<String> getName();
    }
    

    我在网上进行了一些研究,这是我在此链接后实施的内容:Periodic HTTP Requests Using RxJava and Retrofit

    Observable.interval(2, TimeUnit.SECONDS, Schedulers.io())
            .map((tick) -> restService.getName())
            .subscribe(name -> Log.v("sampleApp", "received " + name));
    

    我测试了上面的代码,我认为它满足了#1的要求。但我不确定如何调整它以达到要求#2和#3?

    我看到了几个使用ambWith和mergeWith的例子,但我不太了解它们。如果有人能够解释它们或指向能很好地解释它们的资源,我将不胜感激!

    谢谢!

1 个答案:

答案 0 :(得分:1)

我相信你的例子也满足#2。至于超时,只需在 restService.getName()之后,即在中添加 .timeout(long timeout,java.util.concurrent.TimeUnit timeUnit)。 map()顺便说一下,它应该是 .flatMap()