【问题标题】:How to do error handling in rxjava2 in android如何在android中的rxjava2中进行错误处理
【发布时间】:2017-11-06 06:47:58
【问题描述】:

您好,我在我的 Android 应用程序中使用 RxJava2LiveData。我正在使用下面的 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
} 

如何处理上面代码中的错误。

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)
        }
    }
}

【问题讨论】:

    标签: android kotlin rx-java2 android-livedata


    【解决方案1】:

    如果你想为你的订阅块实现 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) {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2019-06-22
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      相关资源
      最近更新 更多