Android HttpURLConnection非常慢

时间:2012-08-24 11:03:36

标签: android timeout httpurlconnection galaxy

这是我面对以下代码所面临的情况:

正如您所看到的,我正在尝试读取HTTP流。当我在Android模拟器上运行以下代码时,它可以100%的时间工作,当我在Galaxy S3上运行以下代码而在3G上它100%的时间工作,当我尝试使用我的笔记本电脑连接到URL时浏览器100%的时间工作,当我尝试使用Galaxy S3浏览器(在wifi和3g)连接时,它可以工作...... 100%的时间。但是,当我尝试在Wi-Fi上使用Galaxy S3进行连接时,我会在大约80%的时间内使用。如果我删除超时属性,我会得到奇怪的例外,例如:

"recvfrom failed: ETIMEDOUT"
"failed to connect to <URL>: connect failed: ENETUNREACH (Network is unreachable)"
"unable to resolve the host <URL>: no address associated with hostname"

我愿意接受任何建议......

public static final String getHttpResponse(String url)
{
    HttpURLConnection conn = null;
    InputStream response = null;
    try { 
        URL address = new URL(url);
        conn = (HttpURLConnection)address.openConnection();
        conn.setConnectTimeout(30 * 1000); //30 seconds
        conn.setReadTimeout(30 * 1000); //30 seconds

        response = conn.getInputStream();

        if(conn.getResponseCode() != HttpURLConnection.HTTP_OK) { 
            Log.e("Util.getHttpResponse", Integer.toString(conn.getResponseCode()));
            return null; 
        }

        String result = Util.streamToString(response);
        return result;

    } catch(IOException e) {
        response = conn.getErrorStream();
        Log.e("Util.getHttpResponse", Util.streamToString(response));
        return null;

    } finally { 
        if( response != null ) { 
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(conn != null) { 
            conn.disconnect();
        }
    }
}

更新: - 使用AndroidHttpClient无法正常工作 - 在获得输入流之后,我在eclipse IDE中弹出了一个错误...正如你所看到的那样,我的调试光标一直到第107行......这次我完成输入流后... Eclipse

2 个答案:

答案 0 :(得分:1)

我在Android设备上遇到了同样的问题。我在网址中使用了一个IP地址。最后,我发现HttpURLConnection.connect(...)方法在内部涉及getHostName()。之后,我在网址中使用域名,然后它在100%的时间内都可以使用。

答案 1 :(得分:0)

作为一项实验,如果您尝试使用AndroidHttpClient类而不是这样做,该怎么办?它有一些预定义的超时和其他设置,我们被告知,在大多数情况下应该可以正常工作。