我对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()方法?
答案 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。