Android中consumeContent()
类或org.apache.http.HttpEntity的目的是什么?
什么时候应该使用它可以有副作用吗?
我正在尝试修复使用HttpClient向服务器发出请求的应用中的错误,有时如果某个特定请求失败,它会随后失败,尽管互联网没问题。应用程序在输入流读取结束时调用此方法。
答案 0 :(得分:5)
正如@Sotirios建议的那样,HttpEntity.consumeContent()
已被弃用,因此请在可行时使用EntityUtils.consume(HttpEntity)
。
然后让我们广泛谈论消费HttpEntity
。使用HttpEntity
可确保分配给此实体的所有资源都已取消分配。这意味着:
什么时候应该使用它?
您应该在不再需要时释放连接资源。使用HttpEntity
正是这样做的。
它有副作用吗?
我不知道消耗HttpEntity
的任何副作用。
答案 1 :(得分:2)
正如您在javadoc中看到的那样,该方法已被弃用。不要使用它。它依赖于实现。但它应按照描述实施:
调用此方法以指示此实体的内容是 不再需要。预计所有实体实现都将发布 作为此方法调用的结果,所有已分配的资源
相反,您应该使用EntityUtils.consume(HttpEntity)
这样实现
public static void consume(final HttpEntity entity) throws IOException {
if (entity == null) {
return;
}
if (entity.isStreaming()) {
final InputStream instream = entity.getContent();
if (instream != null) {
instream.close();
}
}
}
如果有必要,它只是关闭基础InputStream
。