2016-09-02 34 views
0

我使用retrofit将REST API调用的结果返回给服务器。通常会发生请求超时异常,并且observable停止执行。如何重新订阅重试,如果异常是一个特定类型的如果发生超时异常,则重新订阅可观察项

myObservable 
    .subscribe(new Subscriber<Something> sub(){ 
     @override 
     void onNext(Something something){ 
      //do something with something 
     } 
        @override 
     void onError(Throwable e){ 
      //retry and resend call to server if e is request timeout exception 
     } 

回答

2

可以使用retry运营商。

实施例:

myObservable 
    .retry((retryCount, throwable) -> retryCount < 3 && throwable instanceof SocketTimeoutException) 
    .subscribe(new Subscriber<Something> sub(){ 
     @override 
     void onNext(Something something){ 
      //do something with something 
     } 
        @override 
     void onError(Throwable e){ 

     } 

在该例子时,有一个最大SocketTimeoutException 3次,将重新订阅。

或不拉姆达:

myObservable 
    .retry(new Func2<Integer, Throwable, Boolean>() { 
       @Override 
       public Boolean call(Integer retryCount, Throwable throwable) { 
        return retryCount < 3 && throwable instanceof SocketTimeoutException; 
       } 
      }) 
    .subscribe(new Subscriber<Something> sub(){ 
     @override 
     void onNext(Something something){ 
      //do something with something 
     } 
        @override 
     void onError(Throwable e){ 

     } 
+0

请使用语法,而不lambda表达式。我是编程新手,并不熟悉lambdas –

+0

@MuhammadArsal已更新 – LordRaydenMK

+0

这正是我想要实现的。也许你也可以帮我用这个 http://stackoverflow.com/questions/39309910/repeatedly-make-api-call-with-retrofit-and-rxjava –