使用Kotlin处理错误RXJava Android

时间:2018-09-23 17:43:47

标签: android kotlin retrofit2 rx-java2

您好,我是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 个答案:

答案 0 :(得分:9)

您可以将另一个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运算符无论如何都不会影响流,它们只是预测副作用操作(例如日志记录)发出的值。