从 Retrofit2 和 RxJava 中的错误中获取 URL



我正在使用带有rxjava的refit 2来发送rest请求。 和 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}")
})
})

新的 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()); }
}
});

相关内容

  • 没有找到相关文章

最新更新