【问题标题】:Handling Error RXJava Android with Kotlin使用 Kotlin 处理错误 RXJava Android
【发布时间】: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) },但仍然显示相同的错误消息。

【问题讨论】:

    标签: android kotlin retrofit2 rx-java2


    【解决方案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()] 在我的情况下可能是例外会检查的
    猜你喜欢
    • 1970-01-01
    • 2015-03-06
    • 2017-01-20
    • 2017-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    相关资源
    最近更新 更多