我对 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() 方法?
最佳答案
据我所知,调用 connect()
是没有用的。也许通过调用它,HUC 的状态从 CREATED 变为 CONNECTED。但是在我读过的所有文档中都说调用 connect()
没有坏处,如果您已经连接,它会被忽略。
所以实际上,当你调用像getInputStream()
、getContentLength()
、getOutputStream()
这样的方法时,连接将会是如果尚未完成,则已建立到服务器。
但是 IMO 经常使用错误的一件事:在许多代码示例中,您可以看到 getInputStream()
在 getResponseCode()
之前被调用。我观察到 getInputStream()
在 HTTP 状态代码 >= 400 的情况下调用它时会抛出异常。
所以我建议这样做(伪代码):
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 .
关于android - 出于什么原因我应该调用 UrlConnection.connect(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22469256/