我有一个应用程序,该应用程序可以访问网站以获取XML进行处理。此过程在单独的线程中进行,当我有3G或WiFi可用时,此过程可以正常工作。我也有在实际运行线程之前检查信号的代码,因此它不会在没有连接的情况下进行尝试。

在测试过程中,我走进了一幢阻止所有信号的建筑物,因此当我在外面并有信号时,该过程就开始了,但是当我进入内部时,信号下降并且“进度”对话框一直在运行,我不得不手动关闭程序以获取它恢复。

如果发生这种情况,有什么好方法可以解决此问题而无需用户手动关闭该应用程序?

最佳答案

为您的HttpClient提供超时参数并捕获SocketTimeOutException

HttpParams httpParams=new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, 5000);
HttpClient httpClient=new DefaultHttpClient(httpParams);
try {
    httpClient.execute(new HttpGet("http://myserver.xml"));
}
    catch(SocketTimeoutException ex){
        //Perform Timeout i.e. cancle progress dialog
    }
    catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

08-03 12:35