【问题标题】:How to prevent openConnection() to actually connect如何防止 openConnection() 实际连接
【发布时间】:2015-06-23 09:47:49
【问题描述】:

我想使用HttpURLConnection 连接到我的网络服务,发布一个 XML 并获得结果。我正在使用以下代码:

URL url = new URL(urlString);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");

问题是,当我调用 setRequestProperty 方法时,它会失败并出现 IllegalStateException 说我“已经连接”。显然,openConnection 实际上打开了与 URL 的连接(在我的调试器中,我可以看到 connected 布尔值设置为 true)。不过,根据OracleURL 文档,它不应该。 Android 文档对此并不清楚。

如何防止openConnection 连接,以便我可以设置额外的属性?

更新看起来connection 在某个池中并且没有断开连接,即使在调用connection.disconnect() 之后,甚至终止了服务器。

我不认为这是 this question 的重复,因为它没有给出真正的答案。此外,文档似乎不清楚。

【问题讨论】:

标签: java android http url


【解决方案1】:

openConnection() 无法连接,您发布的代码与您描述的不一样。打开 TCP 连接的是以下任何一种:

  • getInputStream()
  • getErrorStream()
  • getResponseCode()

Ergo您必须在尝试设置请求属性之前调用其中之一。

【讨论】:

  • 连接是否可能在某个池中?我调用了其中一种方法,但随后的连接出现了问题。我确实有finally { connection.disconnect(); }
  • 假设你发布了真实的代码,所以我们都知道你在说什么。
  • 您还应该调用 connection.close() 来真正释放连接。
  • @Markus connection.close() 不存在
  • 我还以为是经典的HttpConnection。可以分享一下实际的工作流程吗?例如。连接 - writeXml - readResponse - 关闭输入流 - 关闭输出流 - 断开连接 - 重复
猜你喜欢
  • 2016-03-09
  • 2021-10-13
  • 2011-11-28
  • 1970-01-01
  • 2017-04-05
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 2014-07-07
相关资源
最近更新 更多