如何使用包装器在rxjava中的单个位置处理错误处理

时间:2017-11-21 17:24:35

标签: android mvvm kotlin rx-java rx-java2

您好我CallbackWrapperrxjava的单个位置处理错误处理。

abstract class CallbackWrapper<T : BaseResponse> : DisposableObserver<T>() {

    protected abstract fun onSuccess(t: T)

    override fun onNext(t: T) {
        onSuccess(t)
    }

    override fun onError(e: Throwable) {
        when (e) {
            is HttpException -> {
                val responseBody = (e as HttpException).response().errorBody()
                responseBody?.let {
                    // todo
                }
            }
            is SocketTimeoutException -> {
                // todo
            }
            is IOException -> {
                // todo
            }
            else -> {
                e.message?.let {
                    // todo
                }
            }
        }
    }


    override fun onComplete() {

    }

    private fun getErrorMessage(responseBody: ResponseBody): String {
        val jsonObject = JSONObject(responseBody.string())
        return jsonObject.getString(("message"))
    }
}

我在LoginViewModel课程中就像下面这样称呼它。

apiHelper.doServerLoginApiCall(email, password)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeWith(object : CallbackWrapper<LoginResponse>() {

                        override fun onSuccess(loginResponse: LoginResponse) {
                            progressVisibility.set(View.GONE)
                        }
                    })

我在onError中有CallbackWrapper方法,通知是否有任何错误。我不知道如何将此错误信息发送到查看模型。我正在使用MVVM设计模式。

任何人都可以暗示我吗?

0 个答案:

没有答案