出于什么原因我应该调用UrlConnection.connect()

时间:2014-03-18 02:24:31

标签: android url httpurlconnection

我对URLConnection.connect()URL.openConnection()感到困惑,来自官方Java文档,它说URL.openConnection()仅返回URLConnection个实例,但尚未打开连接所以我必须在代码中进一步调用URLConnection.connect(),但在Android教程中http://developer.android.com/reference/java/net/URLConnection.html URLConnection.connect()没有被调用。那么URLConnection.getInputStream也建立了连接吗?当我应该调用connect()方法?

1 个答案:

答案 0 :(得分:2)

AFAIK打电话给connect()没用。也许通过调用这个HUC的状态从CREATED变为CONNECTED。但是在我读过的所有文档中,有人说,如果你已经连接,那么拨打connect()并没有受到伤害。

事实上,当您调用getInputStream()getContentLength()getOutputStream()等方法时,如果尚未完成连接,则会建立与服务器的连接。

但有一件事经常使用错误的IMO:在许多代码示例中,您可以看到在getInputStream()之前调用getResponseCode()。我发现,如果在HTTP状态代码> = 400的情况下调用它,getInputStream()会抛出异常。

所以我建议这样做(伪代码):

if (method == POST || method == PUT)
    con.setDoOutput(true)
    writeBody(con)

statusCode = con.getResponseCode()

if (statusCode is successful)
    readStream(con.getInputStream())
else
    // if you expect some information in the body in case of error...
    readStream(con.getErrorStream())

您可以阅读整个(涉及更多)代码here