Rxjava改造为用户解析api错误

时间:2017-09-19 08:11:14

标签: android kotlin retrofit rx-java

我在图书馆项目中使用RxJava进行改造。一切正常,我在请求数据时得到了预期的结果。

<VirtualHost myproject.dev>
    DocumentRoot "path/to/folder/myproject"
    ServerName myproject.dev
    ServerAlias myproject.dev
    <Directory "path/to/folder/myproject">
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

来自API类:

@GET(Routes.ME)
fun getUserObservable(): Observable<User>

从使用此库的主项目中,我得到这样的用户:

fun getUser(): Observable<User> {
    return usersService.getUserObservable()
}

一切正常,但如果发生API错误,那么API会发送给我们,例如:

api.getUser().observeOn(AndroidSchedulers.mainThread())
             .subscribeOn(Schedulers.io())
             .subscribe({ user ->
                        println("Get user success : $user")
                    }, { error ->
                        println("Get user error : $error")
                    })

我想要的是明确地将此错误提供给前端,这会产生此错误,因为直到现在,当我从错误Observable中获取错误时,前端无法解析我想要构建的错误。所以我的目的是从我的库中解析这个错误,用提供的API json构建一个错误POJO,并在前面得到错误时发送它。如果错误不是来自API,则前面应该会出现正常错误。

1 个答案:

答案 0 :(得分:1)

您需要改装的实例才能将异常映射到错误响应。这是一个例子:

class Error(
        var reason: String = "",
        var details: String = "",
        var type: String = ""
)

api.getUser()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({ user ->
            println("Get user success : $user")
        }, { throwable ->
            if (throwable is HttpException) {
                val converter: Converter<ResponseBody, Error> = retrofit.responseBodyConverter(Error::class.java, emptyArray())
                val error = converter.convert(throwable.response().errorBody())
                println("Get user error : ${error.reason}")
            } else {
                println("Get user error : $throwable")
            }
        })
相关问题