【问题标题】:How do i use map() for errors with RxJava2?如何使用 map() 处理 RxJava2 的错误?
【发布时间】:2020-05-21 15:52:37
【问题描述】:

我正在设计一个允许在 Android 设备上检查 Internet 连接的功能。我决定使用反应式方法来实现它。
该函数非常好用并且非常简单:它只是尝试为后端解析 IP,如果 DNS 请求失败则返回 false,成功则返回 true。 函数代码如下:

fun isConnectedToInternet(): Single<Boolean> {
        // Just check whether we can resolve IP for our target API endpoint
        return Single
            .defer{Single.just(InetAddress.getByName(API_URL).toString())}
            .subscribeOn(Schedulers.io())
            // Trick to map an error to just a false value
            .onErrorReturnItem("Error")
            .map { it != "Error" }
    }

问题是最后两行是否被认为是一种好的做法,如果它不是以更好的方式做我想做的事情的正确选择?

【问题讨论】:

    标签: android kotlin rx-java


    【解决方案1】:

    你的代码还不错,但如果我是你,我会这样写:

    fun isConnectedToInternet(): Single<Boolean> {
        // Just check whether we can resolve IP for our target API endpoint
        return Completable
            .fromCallable { InetAddress.getByName(API_URL) }
            .subscribeOn(Schedulers.io())
            .toSingle { true }
            .onErrorReturnItem(false)
    }
    

    【讨论】:

    • 谢谢。这种从 Completable 到 Single 的转换,错误值的变化对我来说看起来更漂亮,但它有点不那么简单。无论如何,我认为这就是我所需要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多