首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在android中取消Http连接

在android中取消Http连接
EN

Stack Overflow用户
提问于 2011-09-03 15:48:12
回答 4查看 4.9K关注 0票数 16

我使用的是org.apache.http,代码如下:

代码语言:javascript
复制
DefaultHttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);

HttpResponse resp = client.execute(get);
HttpEntity entity = resp.getEntity();

InputStream input = entity.getContent();

...
//Read the bytes from input stream

这是我用来通过Http下载文件的代码,我想取消连接(可能是用户选择的)什么是优雅的关闭连接的方式。我找到了两种方法,都可以取消下载。

导致IOException.

  • Aborting对象的SocketException.

关闭输入,()导致HttpGet对象,get.abort()导致IOException.

  1. Aborting

我有尝试捕获,所以没有错误,但没有抛出异常,有没有方法取消或中止连接?

怎样做才是正确的呢?

EN

回答 4

Stack Overflow用户

发布于 2012-09-13 15:06:07

正确的方法是将FIN值发送到服务器端。

然而,在android中,您没有参与这一级别的选项,所以您可以使用C自己实现,或者使用您在问题中提到的方法之一。

票数 3
EN

Stack Overflow用户

发布于 2012-09-16 19:41:46

在我看来,使用HttpUriRequest#about是正确的方式。这将导致底层连接立即终止,并将其从连接池中逐出。较新版本的HttpClient (4.2和更新版本)会截获由用户过早终止请求引起的SocketExceptions。问题是,谷歌发布了一个基于非常过时的版本(pre-beta1)的HttpClient分支。如果您不能或不愿意使用较新版本的HttpClient,那么您唯一的选择就是在代码中捕获并丢弃SocketException。

票数 3
EN

Stack Overflow用户

发布于 2012-09-13 14:48:48

使用此

代码语言:javascript
复制
client.getConnectionManager().closeExpiredConnections();
client.getConnectionManager().shutdown();

现在您可以决定在代码中将这两行代码写在哪里。它将使用您创建的DefaultHttpClient对象关闭连接。

如果这对你有帮助,请告诉我。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7291854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档