首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用IOException包装非IOException

用IOException包装非IOException
EN

Stack Overflow用户
提问于 2020-12-09 21:03:55
回答 1查看 152关注 0票数 1

我正在尝试解决okhttp内部异常(以及任何其他可能的运行时异常):

代码语言:javascript
复制
java.util.NoSuchElementException: 
at okhttp3.internal.connection.RouteSelector.next()(RouteSelector.java:75)
at okhttp3.internal.connection.ExchangeFinder.findConnection()(ExchangeFinder.java:187)
at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection()(ExchangeFinder.java:108)
at okhttp3.internal.connection.ExchangeFinder.find()(ExchangeFinder.java:88)
at okhttp3.internal.connection.Transmitter.newExchange()(Transmitter.java:169)
at okhttp3.internal.connection.ConnectInterceptor.intercept()(ConnectInterceptor.java:41)
at okhttp3.internal.http.RealInterceptorChain.proceed()(RealInterceptorChain.java:142)
...

使用IOException添加拦截器并包装非IOException是否安全?

这样,只会将网络调用标记为失败,而不是使应用程序崩溃。

拦截器看起来像这样:

代码语言:javascript
复制
public class WrapExceptionsInterceptor implements Interceptor {
@NonNull
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
    try {
        return chain.proceed(chain.request());
    } catch (IOException e) {
        throw e;
    } catch (Exception e) {
        throw new IOException(e);
    }
}

我只是担心这会不会让OkHttpClient处于无效状态?

改装版本: 2.9.0

okhttp版本: 3.14.0

EN

回答 1

Stack Overflow用户

发布于 2020-12-10 15:04:27

你不需要这样做,这显示了一个错误,在这种情况下,很可能在4.9.0中修复了。升级到3.14.9也可以修复它,但在这种情况下不再支持它,所以考虑采用4.9.0。

https://github.com/square/okhttp/issues/5605

如果异常是由您的代码抛出的,那么抛出IOException将是合适的做法,但是来自OkHttp内部的运行时异常会使其处于潜在的不一致状态(希望仍然可以工作)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65217344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档