使用 Kotlin 处理错误 RXJava Android

Posted

技术标签:

【中文标题】使用 Kotlin 处理错误 RXJava Android【英文标题】:Handling Error RXJava Android with Kotlin 【发布时间】:2019-02-27 08:06:59 【问题描述】:

您好,我是 RxJava 和 Kotlin 的新手,我对它有些概念。

我有这样的“api”:

interface VehiclesService 
    @GET("/vehicles/")
    fun getVehicles(): Single<List<Vehicle>>

然后我创建改造客户端等。像这样:

var retrofit = RetrofitClient().getInstance()
vehiclesAPI = retrofit!!.create(VehiclesService ::class.java)

我终于打电话了:

private fun fetchData() 
        compositeDisposable.add(vehiclesAPI .getVehicles()
                .subscribeOn(Schedulers.io())
                .observeOn(androidSchedulers.mainThread())
                .subscribe  vehicles -> displayData(vehicles) 
        )
    

这是我在尝试启动时遇到错误的地方:

The exception was not handled due to missing onError handler in the subscribe() method call

我知道错误非常明确。所以我知道缺少什么,但我不知道如何处理这个错误。

我尝试添加:.doOnError error -&gt; Log.d("MainClass",error.message) ,但仍然显示相同的错误消息。

【问题讨论】:

【参考方案1】:

您可以将另一个 lambda 传递给 subscribe 来处理特定流的错误,如下所示:

    private fun fetchData() 
    compositeDisposable.add(vehiclesAPI .getVehicles()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(  vehicles -> displayData(vehicles) ,  throwable -> //handle error  )
    )

P.S:doOnError 和其他 Side Effect 运算符无论如何都不会影响流,它们只是预期为副作用操作(例如日志记录)发出的值。

【讨论】:

如果我用逗号分隔它,正如你发布的那样,我收到一个错误:`unexpected tokens (use ; to分隔同一行中的表达式)´。如果我把这个分号,我得到一个错误。 糟糕,我没有看到您使用 lambda 进行订阅,已编辑。 哦!完美的 !!现在我看到了是如何编码的,我了解发生了什么,以及如何去做。谢谢! 很高兴为您提供帮助 感谢链接 ahmed 我认为 this[OnErrorNotImplementedException: reintroduced to detect when user forgot to add error handling to subscribe()] 在我的情况下可能是例外会检查的

以上是关于使用 Kotlin 处理错误 RXJava Android的主要内容,如果未能解决你的问题,请参考以下文章

使用 Kotlin 进行 RxJava 和改造

使用 RxJava 生成一个映射,其中键是 Kotlin 枚举的值,映射的值来自另一个 RxJava 流

使用 Kotlin 的 RxJava 中的花括号和普通括号有啥区别

当Kotlin遇见RxJava多数据源

为啥我不能在 Kotlin Flow 中使用像 rxJava.Single.create 这样的发射函数?

如何在RxJava 2和Kotlin中将null传递给具有可空类型的Observable