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
11 个月之前 回复
bluky_di
bluky_di 回复li841103:或许你可以试试在获取到异常以后通过instance of 去判断。
11 个月之前 回复
li841103
li841103 回复bluky_di: 回复bluky_di: 回复bluky_di: 非常抱歉,是我的表述不清楚, 在OKHTTPClient client.newCall onFailure(Call call, IOException e)返回失败的时候,它返回给我了一个异常,由于我设置了请求超时,当请求超时的时候通过判断这个异常来断定是否是因为超时引起的,我现在只能通过字符串比较的本办法来实现,想要知道有没有更好的办法?
11 个月之前 回复
bluky_di
bluky_di 回复li841103: 你好,不是很清楚你是什么意思。一般情况下,我们写了某个抛出异常的方法,如果不写try catch的话,编译是会报错的,而且想要知道是什么异常可以跟踪源码过去看的。那你catch到的不就是这个抛出的指定异常么?为什么要判断呢?
11 个月之前 回复
li841103
li841103 是已经返回给我了一个异常 我需要判断这个异常的类型
11 个月之前 回复
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所名访问网络成功了啊
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!