我有以下代码

private void tryToLauch() {
        try {
            launch();
        } catch (MyException e) {
            postError(e.getErrorMessage());
            e.printStackTrace();
        }
    }


如何将其转换为Rx,如果出现异常,它将在一段时间内重试?

最佳答案

鉴于您的方法的返回类型为void,建议您使用Completable

您可以使用RxJava 2尝试此解决方案

Completable myCompletable = Completable.fromAction(new Action() {
        @Override
        public void run() throws Exception {
            launch();
        }
    }).retry(3 /*number of times to retry*/, new Predicate<Throwable>() {
        @Override
        public boolean test(Throwable throwable) throws Exception {
            return throwable instanceof MyException;
        }
    });


然后订阅完成

myCompletable.subscribeOn(SubscribeScheduler)
             .observeOn(ObserveScheduler)
             .subscribe(this::onComplete, this::onError);


希望这可以帮助。

关于android - 转换可以扔给Rxjava的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54830219/

10-11 22:28