android - 从retrofit2和rxjava中的错误获取url
问题描述
我正在使用带有 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}")
})
})
解决方案
即使 GSON 错误,新的 Consumer() 方法也始终提供有关任何类型错误的消息
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()); }
}
});
推荐阅读
- javascript - 粘性标题下的内容在滚动时跳转
- python - 从另一个文件夹导入一个文件夹中的文件
- r - R:将数据帧附加到循环中的列表的问题
- c# - GAC 中的 MSTestV2 程序集
- mysql - MySQL 根据另一个表的列从一个表中选择列的总和
- ios - Instagram 共享以供 iOS 不工作(UIDocumentInteractionController)
- reactjs - 道具更改时不执行useEffect
- typescript - 类验证器 DTO 组合
- tomcat - Apache Shiro 在 Tomcat 中未经过身份验证,然后重新启动 Oracle sql db
- scipy - 了解 scipy.spatial.KDTree 中的 `leafsize`