使用 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 -> 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的主要内容,如果未能解决你的问题,请参考以下文章
使用 RxJava 生成一个映射,其中键是 Kotlin 枚举的值,映射的值来自另一个 RxJava 流
使用 Kotlin 的 RxJava 中的花括号和普通括号有啥区别