如何处理I / O错误:无法连接到/10.0.2.2(端口8080):连接失败:异步任务内的ETIMEDOUT(连接超时)

时间:2016-06-02 08:28:22

标签: android

我在使用Rest模板登录期间调用其他Web服务。托管服务的服务器未处于活动状态。我尝试登录,花了一些时间然后抛出异常连接失败。

我想设置一个计时器,例如: - 30秒。如果AsyncTask的doInBackground()没有完成执行,我想取消它并显示一条消息,服务器不可用稍后再试。

现在,我使用了 CountDownTimer ,我调用了cancel()来实现这一点,我几乎实现了它,但我感觉有些不对劲。因为在超时后doInBackground()不会停止,它会在后台继续执行并在postExecute()内打印一条日志消息。

任何人都可以建议一种方法来实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

配置RestTemplate时,您可以配置timeout

// If using OkHttp, use OkHttpRequestFactory
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
clientHttpRequestFactory.setConnectTimeout(20000);
clientHttpRequestFactory.setReadTimeout(20000);
RestTemplate testTemplate = new RestTemplate(clientHttpRequestFactory);

在进行网络调用以向用户显示消息时,您可以try/catch例外。