【发布时间】:2012-11-06 15:56:52
【问题描述】:
我正在尝试获取一个 http 响应字符串(只是一个 JSON 对象),有时这段代码会在
中等待无限时间
line = reader.readLine()
可能是,这种行为的原因是互联网连接不好(我使用 3G 调制解调器),但我需要一个稳定的解决方案来避免这种无限锁定。这里可以做些什么来避免它?
HttpResponse response = httpClient.execute(httpPost);
InputStream content = null;
JSONObject json_obj;
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
try {
content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content, "UTF-8"), 256);
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {}
}
【问题讨论】:
-
你可以在一个单独的线程中做
readLine()的东西,当你想杀死所有东西时关闭阅读器 -
为什么(最重要的是如何)您认为避免网络查询是非阻塞的? (另外,EntityUtils.toString 做了你在 1 行中所做的事情)
-
@fiddler 我已经在后台线程中这样做了,问题只是关于阻塞。
-
@njzk2 非常感谢,伙计!这是最好的解决方案:)
-
@njzk2 还有关于阻塞。问题是当请求已经发送到服务器并且服务器响应时发生阻塞,但是响应从未收到并且没有完全收到并且线程什么都不等待。所以超时是好事,只是不知道怎么设置。
标签: java android tcp bufferedreader