【问题标题】:How To handle I/O error: failed to connect to /10.0.2.2 (port 8080): connect failed: ETIMEDOUT (Connection timed out) inside Async Task如何处理 I/O 错误:无法连接到 /10.0.2.2(端口 8080):连接失败:异步任务中的 ETIMEDOUT(连接超时)
【发布时间】:2016-10-01 20:58:47
【问题描述】:

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

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

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

任何人都可以提出一种方法来实现这一点吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    配置RestTemplate时,可以配置timeout

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

    并且您可以在进行网络调用以向用户显示消息时try/catch 异常。

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 2015-07-12
      • 2016-01-02
      • 2021-10-22
      • 2016-11-13
      • 2017-02-13
      • 2017-07-25
      • 1970-01-01
      • 2014-11-11
      相关资源
      最近更新 更多