【问题标题】:get url from error in retrofit2 and rxjava从retrofit2和rxjava中的错误获取url
【发布时间】:2019-03-20 18:30:54
【问题描述】:

我正在使用带有 rxjava 的改造 2 来发送休息请求。和 Gson 作为 json 解析。

如果 Gson 无法解析 json 字符串,则抛出 java.lang.IllegalStateException 并带有一些消息。我的问题是我不知道这个错误发生在哪个 url 上。

如果错误类型是 HttpException,我可以从中获取 url,但在其他类型中,例如 java.lang.IllegalStateExceptionTimeoutException,只能访问错误消息,我看不到 url。

如何在 rxjava 中实现 url 和改造 catch。

这是我的代码:

mainApi.getSomething(offset, limit, distance, latitude, longitude)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({it:Response<Something>
                val entities = it.body()?.entities
                callBack.onResponse(it.raw(), entities)
            }, {//it:throwable
                if (t is HttpException) {
                   Log.d("logUrl", "HttpException : ${t.response().raw().request().url()} : ${t.code()} :${t.message()}")
                } else//something like IllegalStateException or TimeoutException
                     Log.d("logUrl", "Failure : ${t.localizedMessage}")
                })
               })

【问题讨论】:

  • if(t instanceof HttpException){ Log.d("path",((HttpException) t).response().raw().request().url().url()。 toString()); }....
  • @kubersingh 这就是我所做的。我想要其他类型异常的解决方案
  • 好的,我正在使用 callabck 方式,我总是在 @Override public void onFailure(Call call, Throwable t) 方法上得到错误响应
  • 是的,如果使用回调,调用实例可用,但在 RxJava ...

标签: android kotlin retrofit2 rx-java2 rx-android


【解决方案1】:

新的 Consumer() 方法总是提供关于任何类型错误的消息,即使是 GSON 错误

 mGetDeviceObserver.subscribeOn(Schedulers.newThread())
         .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Consumer<RegData>() {
    @Override
    public void accept(@NonNull RegData mRegData) throws Exception {
    }
}, new Consumer<Throwable>() {
    @Override
    public void accept(@NonNull Throwable t) throws Exception {
       if(t instanceof HttpException){ Log.d("path",((HttpException) t).response().raw().request().url().url().toString()); }
    }
});

【讨论】:

  • 我想这会对你有所帮助
  • 您的答案仅针对我已经在代码中编写的 HttpException。如果发生任何其他异常类型 Throwable 将收到但因为这不是 HttpException 那么我看不到哪个 url 引发了这个错误。
猜你喜欢
  • 2017-01-20
  • 2016-03-24
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 2018-12-24
  • 2019-06-03
相关资源
最近更新 更多