简体   繁体   English

如何在android中的rxjava2中进行错误处理

[英]How to do error handling in rxjava2 in android

Hi I am using RxJava2 with the LiveData in my android app. 嗨我在我的Android应用程序中使用RxJava2LiveData I am making a http call using below 我正在使用下面的http电话

@Inject
lateinit var retrofit: Retrofit

override fun doServerLoginApiCall(email: String, password: String): LiveData<LoginResponse> {
    val liveData = MutableLiveData<LoginResponse>()

    retrofit.create(RestApi::class.java).login(email, password)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe { loginResponse ->
                liveData.setValue(loginResponse);
            }

    return liveData
} 

How I can handle an error like below in above code. 我如何在上面的代码中处理如下所示的错误。

when (e) {
    is HttpException -> {
        val responseBody = (e as HttpException).response().errorBody()
        responseBody?.let {
            view?.onUnknownError(getErrorMessage(it))
        }
    }
    is SocketTimeoutException -> {
        view?.onTimeout()
    }
    is IOException -> {
        view?.onNetworkError()
    }
    else -> {
        e.message?.let {
            view?.onUnknownError(it)
        }
    }
}

If you want to implement onError for your subscribe block, you can do it like this: 如果要为订阅块实现onError,可以这样做:

retrofit.create(RestApi::class.java).login(email, password)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
                // success
                { loginResponse ->
                    liveData.setValue(loginResponse)
                },
                // error
                { e -> handleError(e) })

...

fun handleError(e: Throwable) {
    when (e) {
    ...
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM