从retrofit2和rxjava中的错误获取url
Posted
技术标签:
【中文标题】从retrofit2和rxjava中的错误获取url【英文标题】:get url from error in retrofit2 and rxjava 【发布时间】:2019-03-20 18:30:54 【问题描述】:我正在使用带有 rxjava 的改造 2 来发送休息请求。和 Gson 作为 json 解析。
如果 Gson 无法解析 json 字符串,则抛出 java.lang.IllegalStateException
并带有一些消息。我的问题是我不知道这个错误发生在哪个 url 上。
如果错误类型是 HttpException
,我可以从中获取 url,但在其他类型中,例如 java.lang.IllegalStateException
和 TimeoutException
,只能访问错误消息,我看不到 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 ... 【参考方案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 引发了这个错误。以上是关于从retrofit2和rxjava中的错误获取url的主要内容,如果未能解决你的问题,请参考以下文章
retrofit2+rxjava+mockserver使用和理解
retrofit2.0+RxJava结合使用时,怎么才能通过post请求返回一个response对象
Android-Rxjava+Retrofit2.x 获取Http状态码响应头(Headers)等数据