【问题标题】:Handle errors in Retrofit 2 RX处理 Retrofit 2 RX 中的错误
【发布时间】:2016-03-03 04:03:40
【问题描述】:

我的请求应该得到 POJO 的 JSON 或 JSON 描述的错误(可能是无效的请求字段、服务器问题等)。

但是订阅者的改造只给了我 Throwable。我怎样才能知道是网络错误,什么是 http 代码,并得到错误的 JSON?

private class ProjectListSubscriber extends Subscriber<ProjectListResponse> {

    @Override
    public void onCompleted() {
    }

    @Override
    public void onError(Throwable e) {
        //is that a network? http code? convert json to error POJO?
    }

    @Override
    public void onNext(ProjectListResponse projectListResponse) {
        updateProjectList(projectListResponse.getProjectList());
    }
}

【问题讨论】:

    标签: android retrofit rx-java


    【解决方案1】:

    由于您使用的是 RxJava,因此在出现网络错误时会调用 onError,并且与端点相关的错误是 Response 的一部分。 如果出现错误,请检查 throwable 是否是 HttpException 的实例

    public void onError(Throwable e) {
        if (e instanceof HttpException) {
    

    如果检查为真,则您的请求中有错误。将 throwable 投射到HttpException,访问权限为会员。例如。

    ((HttpException) e).response().errorBody()
    

    如果检查是false,那么你有一个网络相关的错误。

    【讨论】:

    • 如何在 Rx 中获取 Response 对象?
    • 谢谢。我刚刚检查过 - onError callen 以防出现任何非 200 http 代码。不仅是网络错误。
    猜你喜欢
    • 2017-01-01
    • 2020-03-13
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2019-05-24
    • 2017-01-14
    • 2016-02-17
    • 2023-03-20
    相关资源
    最近更新 更多