【发布时间】:2011-09-03 07:48:11
【问题描述】:
我正在使用org.apache.http,我有这个代码:
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 下载文件的代码,我想取消连接(可能是用户选择的) 关闭连接的优雅方式是什么。我找到了两种方法,都取消了下载。
- 关闭 inputsteram, input.close();这会导致 IOException。
- 中止 HttpGet 对象,get.abort() 会导致 SocketException。
我有try catch,所以没有错误,但没有抛出异常, 有没有办法取消或中止连接?
正确的做法是什么?
【问题讨论】:
-
是的,在 doInBackground() 中我读取数据,在 onCancelled 中我需要一个正确的方法来取消下载,我目前正在从上面的代码中执行 get.abort()。
-
我认为您无法取消获取。您只需取消异步任务,然后在 onCancelled() 中做任何您想做的事情,即忽略您可能得到的任何结果。也检查这个帖子:stackoverflow.com/questions/4880363/…
-
正如我所说,我也在做同样的事情,在 onCancelled 方法中,我使用 get.abort() 中止下载并且它的发生没有任何问题,但是它抛出了我正在捕获的 socketException,我怀疑是没有捕获异常(或者说抛出异常)如何中止它。
-
你可以试试
EntityUtils.consume(entity)看看这个How to Answer[1] [1]: stackoverflow.com/a/7152466/885152 -
消费才是正道。不会浪费任何资源,Java(除了本机代码)没有任何“真正的内存泄漏”。
标签: java android httpclient