如何在Android中取消Http请求

时间:2012-07-10 18:04:45

标签: java android httpclient

我有一个Thread Safe HttpClient用于整个应用程序,我有一个Service和一个Activity,它们在不同的Threads中经常进行各种REST API调用。 有时我需要取消已启动的HttpRequest,因为我已经需要使用更新的数据启动另一个。 我不想让用户等待第一个请求完成,然后等待第二个请求,也许此时用户将再次更新数据,我需要调用第三个请求。 所以我想做的是用旧数据取消请求并开始一个新数据。我尝试取消AsyncTask,但由于某种原因它不会取消已启动的请求。这是我的代码:

if (getAlbumImage != null && getAlbumImage.getStatus() == AsyncTask.Status.RUNNING) {
    Log.d(VibesApplication.VIBES, "cancelling image loader");
    getAlbumImage.cancel(true);
}
getAlbumImage = new GetAndSetAlbumImage();
getAlbumImage.execute(performer, name);

我还尝试关闭连接管理器。如下所示:https://stackoverflow.com/a/7311393/1032286 但我只有一个客户端和经理,我不想每次进行REST调用时都创建它们。 我该怎么办?如果有办法取消所有正在运行的请求,我会很高兴,但如果有办法取消单独的请求,那将是很好的。

2 个答案:

答案 0 :(得分:5)

尝试yourHttpRequest.abort()

HttpGetHttpPost都实施AbortableHttpRequest,并且abort()方法

http://developer.android.com/reference/org/apache/http/client/methods/AbortableHttpRequest.html

答案 1 :(得分:0)

取消异步任务仅将任务的IsCanceled标志设置为true。如果您希望停止后台任务,则必须在runInBackground函数的基本不同里程碑中显式检查IsCanceled标志。我记得之前遇到过这个问题,找不到一种停止HTTPRequest的明确方法。我所做的是基本上忽略了第一个AsyncTask并启动了一个新的AsyncTask。由于第一个任务被取消,每当它完成运行时,我只需通过检查IsCanceled标志来丢弃该信息。