java - 如何终止一个 Observable?

标签 java android rx-java rx-android

我有一个 Observable,如果不满足某个条件(即如果某个网站的响应不成功),我想终止它,以便我可以重新查询该网站,并再次调用该 observable。我该怎么做?

这是我想做的:

Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {

        //Perform network actions here

        if (!response.isSuccessful()) {
            //terminate this Observable so I can retrieve the token and call this observable again
        }
    }

});

最佳答案

您可以使用 retry Rx 的运算符。并且不需要终止一个 Observable。

定义了一个自定义异常:

public class FailedException extends RuntimeException{
    // ...
}


private static final int RETRY_COUNT = 3; // max retry counts
Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {
            //Perform network actions here
            if (!response.isSuccessful()) {
                // if response is unsucceed, invoke onError method and it will be stop emit data and into retry method.
                subscriber.onError(new FailedException());
            }
        }

    })
    .retry((integer, throwable) -> {
        // Retry network actions when failed.
        // if return true, Observable will be retry to network actions emit data;
        // if return false, you can process in onError() method of Subscribe.
        return throwable instanceof FailedException && integer < RETRY_COUNT;
    })

关于java - 如何终止一个 Observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32989849/

相关文章:

java: 一长串条件,怎么办?

java - 在java中创建新节点时出错

android - Android:如何将图库中的图像加载到OpenCv Mat变量中?

android - RxJava/RxKotlin 提示访问 View

java - 如何从 JFrame 1 获取数据到另一个 JFrame?

Java - 使用 JDBC 连接到在线 MySQL 数据库时遇到问题

android - 如何在 Android 上使用 wit.ai 获取希伯来语语音输入和输出

java - 无法从 base64 字符串中获取完整的图像质量

scala - Scala流库的差异( react 流/Iteratee/RxScala/Scalaz…)

java - 结合RxJava了解Android内存泄漏