rxjava,改造如何重试(retryWhen)了解具体情况?

时间:2016-10-19 21:36:42

标签: retrofit rx-java

我有一个连接服务器和登录帐户的功能:

Observabe<Response> loginAccount();

大多数情况下,它可以登录成功:

   loginAccount().subscribe(new Subscriber<Response>() {
        @Override
        public void onCompleted() {

           System.out.println("success");
        }

        @Override
        public void onError(Throwable e) {
            e.printStackTrace();

        }

        @Override
        public void onNext(Response authenticationResponseResult) {
          System.out.println(authenticationResponseResult,toString());

        }
    });

但是,有几次有 SocketTimeoutException 。 我只想重试 SocketTimeoutException 最多重试两次

我该如何实施?

我知道可能我可以使用retryWhen,但我不知道如何在异常 SocketTimeoutException 时使用它以及如何重试最多两次

1 个答案:

答案 0 :(得分:1)

使用retry

的2参数重载
loginAccount()
.retry((throwable, count) -> count < 2 && (throwable instanceof SocketTimeoutException))
.subscribe(....);