1

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

如您所见,我正在尝试读取 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 行 .. 在我完成之后这次的输入流... 蚀

4

2 回答 2

1

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

于 2013-02-05T10:56:15.970 回答
0

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

于 2012-08-24T11:19:49.703 回答