Android:如何设置HTTP连接超时并对其做出反应?

时间:2012-07-24 20:14:33

标签: android http

我正在开发一款Android应用,它需要在网页启动时从网页读取一行。我使用以下代码执行此操作:

try{
        URL url = new URL("http://www.example.com");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
        line = reader.readLine();
}
catch(Exception e){
        e.printStackTrace();
}

它工作正常,但有时连接或服务器很慢,应用程序冻结或崩溃。

我想要超时5秒,如果达到超时,我想向用户表示敬酒,说网络正忙,请他稍后再试。

我尝试了HttpURLConnection setConnectTimeout()方法,但它没有用。

有什么线索我能做到这一点吗?谢谢正手。

2 个答案:

答案 0 :(得分:3)

如果你将setConnectionTimeout设置为5秒,可能会有更好的解决方案,捕获SocketTimeoutException并从那里显示Toast。当您将ConnectionTimeout设置为某个值并且连接未获得响应代码时将抛出SocketTimeoutException。在这里,您可以捕获它并调用处理程序以在UI中显示吐司。最后将关闭连接并释放内存。

class MyHttpClient extends DefaultHttpClient {
    @Override
    protected ClientConnectionManager createClientConnectionManager() {
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https", 
            mSSLSocketFactory != null 
            ? mSSLSocketFactory 
            : SSLSocketFactory.getSocketFactory(), 
            443));

    return new SingleClientConnManager(getParams(), registry);
}

   MyHttpClient httpClient = new MyHttpClient();

    // set http params
    HttpParams params = httpClient.getParams();
    params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, new Integer(30000));
    params.setParameter(CoreConnectionPNames.SO_TIMEOUT, new Integer(30000));
    httpClient.setParams(params);

    ....
    httpClient.execute(httpUriRequest) 

答案 1 :(得分:1)

请考虑使用AndroidHttpClient类,它具有很好的预设超时,因此您无需执行任何操作。