使用Kotlin处理错误RXJava Android

Shu*_*udy 6 android kotlin retrofit2 rx-java2

嗨,我是RxJava和Kotlin的新手,我放弃了一些关于它的概念.

我有这样的"api":

interface VehiclesService {
    @GET("/vehicles/")
    fun getVehicles(): Single<List<Vehicle>>
}
Run Code Online (Sandbox Code Playgroud)

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

var retrofit = RetrofitClient().getInstance()
vehiclesAPI = retrofit!!.create(VehiclesService ::class.java)
Run Code Online (Sandbox Code Playgroud)

最后我打电话:

private fun fetchData() {
        compositeDisposable.add(vehiclesAPI .getVehicles()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe { vehicles -> displayData(vehicles) }
        )
    }
Run Code Online (Sandbox Code Playgroud)

这是我尝试启动时出现错误的地方:

The exception was not handled due to missing onError handler in the subscribe() method call
Run Code Online (Sandbox Code Playgroud)

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

我尝试添加:.doOnError { error -> Log.d("MainClass",error.message) }但仍然告诉相同的错误消息.

Ahm*_*mal 10

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

    private fun fetchData() {
    compositeDisposable.add(vehiclesAPI .getVehicles()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe( { vehicles -> displayData(vehicles) }, { throwable -> //handle error } )
    )
}
Run Code Online (Sandbox Code Playgroud)

PS:doOnError和其他副作用运算符,无论如何都不会影响流,它们只是预测为副作用操作发出的值,例如日志记录.

  • 我的坏,我没有看到你使用lambda进行订阅,编辑. (2认同)