2 li841103 li841103 于 2017.01.13 13:43 提问

关于OKHttpClient中设置超时的问题

我在使用OKhttpClient时设置了超时:
client = new OkHttpClient.Builder()
.connectTimeout(5, TimeUnit.SECONDS)//单位是秒
.readTimeout(20, TimeUnit.SECONDS)
.build();

                                            但是在发生超时的时候,我不知道该如何捕获超时的异常,我有尝试使用  if(e.getCause().equals(SocketTimeoutException.class)时发现e.getCause始终未Null  请问我改如何捕获此类异常呢?

3个回答

bluky_di
bluky_di   2017.01.13 14:29

捕获异常不都是try catch么。。

li841103
li841103 回复bluky_di: 我使用 if(e.getCause() instanceof SocketTimeoutException) e.getCause() 始终都为Null
一年多之前 回复
bluky_di
bluky_di 回复li841103:或许你可以试试在获取到异常以后通过instance of 去判断。
一年多之前 回复
li841103
li841103 回复bluky_di: 回复bluky_di: 回复bluky_di: 非常抱歉,是我的表述不清楚, 在OKHTTPClient client.newCall onFailure(Call call, IOException e)返回失败的时候,它返回给我了一个异常,由于我设置了请求超时,当请求超时的时候通过判断这个异常来断定是否是因为超时引起的,我现在只能通过字符串比较的本办法来实现,想要知道有没有更好的办法?
一年多之前 回复
bluky_di
bluky_di 回复li841103: 你好,不是很清楚你是什么意思。一般情况下,我们写了某个抛出异常的方法,如果不写try catch的话,编译是会报错的,而且想要知道是什么异常可以跟踪源码过去看的。那你catch到的不就是这个抛出的指定异常么?为什么要判断呢?
一年多之前 回复
li841103
li841103 是已经返回给我了一个异常 我需要判断这个异常的类型
一年多之前 回复
oyljerry
oyljerry   Ds   Rxr 2017.01.13 16:57
 @Override
    public void onFailure(Call call, Throwable t) {
        if(t instanceof SocketTimeoutException){
            message = "Socket Time out. Please try again.";
        }
    }

qq_33750826
qq_33750826   2017.01.13 17:01

这个问题太简单了,当你使用OKHttp异步去访问网络的时候不是callback不是要实现两个方法吗?其中有一个方法是onFail(Call call, IOException e)你只要判断e.getCause().equals(SocketTimeoutException.class)就行了

qq_33750826
qq_33750826 为null所名访问网络成功了啊
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
OkHttpClient 请求超时问题-------以解决
java.net.SocketTimeoutException: timeout at okio.Okio$4.newTimeoutException(Okio.java:230) at okio.AsyncTimeout.exit(AsyncTimeout.java:285) at okio.AsyncTimeout$2.read(AsyncTimeout.java:241) at ok
OkHttp3超时设置和超时异常捕获
OkHttp3超时设置和超时异常捕获
OkHttp设置连接超时时间
异步:OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS)//设置连接超时时间 .readTimeout(20, TimeUnit.SECONDS)//设置读取超时时间 .build(); Request.Builder build...
okHttp的请求超时以后,连续发送5次请求后就不能再发送请求了
项目之中遇到了OkHttp 请求超时以后就不能发送请求了, 解决办法是在onFail的里面再添加一下HttpClient.mOkHttpClient = new OkHttpClient();  public void onFailure(Call call, IOException e) {                 HttpClient.mOkHttpClient = ne
okhttp设置超时时间
我们可以通过OkHttpClient的Builder来设置超时时间 public final static int CONNECT_TIMEOUT =60; public final static int READ_TIMEOUT=100; public final static int WRITE_TIMEOUT=60; //设置读取超时为100秒,就是为了读取充值的订单
android的HttpClient添加请求超时时间
在以前做一个android的移动项目的时候,想为httpClient对象添加请求超时和读取超时时间,发现httpClient的对象实现的defaultHttpClient对象中就没有设置超时时间的方法,所以一直郁闷的,觉得怎么回没有,难道defaultHttpClient对象中已经封装了请求超时时间和读取时间,不过这样不是可扩张性不好了,最近在android论坛上面,发现了其实android的ht
解决httpclient超时设置不生效的问题
最近公司有项目需要通过http调用第三方服务,且第三方服务偶有超时,故需要设置一定的超时时间防止不响应的情况出现。 初始设置如下: //超时设置 RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(400).setSocketTimeout(400).build();
Okhttp使用详解
在Android开发中,发送HTTP请求是很常见的。SDK中自带的HttpURLConnection虽然能基本满足需求,但是在使用上有诸多不便,为此,square公司实现了一个HTTP客户端的类库——Okhttp 。Okhttp是一个支持HTTP 和 HTTP/2 的客户端,可以在Android和Java应用程序中使用,其具有以下特点: 1. API设计轻巧,基本上通过几行代码的链式调用即可获取结
okHttp 添加动态的 超时时间 处理
场景   由于某个接口耗时比较长,故需要对okHttpClient添加动态的超时时间,来满足业务场景 处理方式   实现OkHttp动态添加超时时间 实现原理   查看Retrofit和OkHttpClient源码,根据Retrofit反射拿到OKHttpClient的信息并进行动态设置超时时间 工具类地址 下载链接 http://download.csdn.net/download/gl_
OkHttp设置链接超时
okhttp设置链接超时网上有很多,记录一下 异步 OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS)//设置连接超时时间 .readTimeout(20, TimeUnit.SECONDS)//设置读取超时时间 .bui