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

标签 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() 方法?

最佳答案

据我所知,调用 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/

相关文章:

java - Fragment中的内存泄漏问题

git - 在 cygwin 下,如何在 Windows 上指定带空格的 git URL?

java - HttpUrlConnection 在 connect() 上获取响应主体

java - HttpURLConnection 未按预期响应

android - 确定自上次用户在 Android 中 Activity 以来的时间

android - 我怎样才能让物理按钮回到上一节课

java - 我如何在 Android 中绑定(bind)此服务?

url - url 中的特殊字符(å æ ø)会导致 404 错误 Facelets?

cakephp - 如何在没有 ID 的情况下在 CakePHP 中使用 SEO url?

android - 在 Android 中,为什么所有 org.apache.http.* 类都在 API 22 中被弃用(我应该使用什么作为替代品)?