【问题标题】:Android HttpURLConnection VERY slowAndroid HttpURLConnection 很慢
【发布时间】:2012-08-19 22:40:54
【问题描述】:

这是我在下面的代码中面临的情况:

如您所见,我正在尝试读取 HTTP 流。当我在 Android 模拟器上运行以下代码时,它可以 100% 运行浏览器它在 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 行 .. 这次我完成了输入流...

【问题讨论】:

    标签: android timeout httpurlconnection galaxy


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      作为一个实验,如果你尝试使用AndroidHttpClient 类来代替做同样的事情呢?它有一些预定义的超时和其他设置,我们被告知,在大多数情况下应该可以正常工作。

      【讨论】:

      • 谢谢,我会试一试并回复。但是,我确实尝试使用 org.apache.http.client.HttpClient 并且得到了相同的结果。
      猜你喜欢
      • 1970-01-01
      • 2017-10-31
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多