使用HttpEntity的consumeContent()

时间:2014-02-16 23:20:02

标签: java android httpclient android-networking

Android中consumeContent()类或org.apache.http.HttpEntity的目的是什么?

什么时候应该使用它可以有副作用吗?

我正在尝试修复使用HttpClient向服务器发出请求的应用中的错误,有时如果某个特定请求失败,它会随后失败,尽管互联网没问题。应用程序在输入流读取结束时调用此方法。

2 个答案:

答案 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