android取消之前的http获取请求

时间:2013-08-02 12:52:24

标签: android web-services androidhttpclient

我想根据网络服务的建议创建一个autoCompleteTextview。在文本更改时,我使用输入的文本调用Web服务。

public String searchpalace_Searchtext(String serchtext)  
{       
    String resultString = "";   
    try {           
        String searchtext = URLEncoder.encode(String.valueOf(serchtext), "UTF-8");              
        HttpClient Clientloc = new DefaultHttpClient();         
        String URL = baseUrl + "places?name=" + searchtext;      
        HttpGet httpget = new HttpGet(URL);
        ResponseHandler<String> responseHandler = new BasicResponseHandler();

        resultString = Clientloc.execute(httpget, responseHandler);             
    }
    catch (Exception e) {
        resultString = "";
    }     

    return resultString;
}

当输入或删除到达字符时,从asyncTask调用此函数。现在,当快速输入文本时,我想在新请求到达时取消待处理的请求。如何取消之前的请求?

3 个答案:

答案 0 :(得分:1)

您可以浏览每个排队的任务并致电cancel() method。使用isCancelled()检查任务是否已取消。不要为文本框中的每个更改触发异步任务。您可以引入一个小延迟,以避免不必要地创建AsyncTask个对象。

答案 1 :(得分:0)

您可以使用Android排球网络工具包取消Http请求,

答案 2 :(得分:0)

如果HttpClient.execute()可以被中断,AsyncTask.cancel(true)将在你传递(true)时执行。实验中,文档没有说明它是否可以中断。 如果没有,那么您可能需要调查另一个答案中建议的工具包。 无论如何,你可以检查isCancelled()而不是应用结果。一旦连接启动,可能不是一个巨大的开销。

请注意,根据Android版本,有时多个AsyncTasks可以并行运行(donut - honecomb),有时它们一次只运行一个并排队(蜂窝向上)。您可以更改线程执行程序以允许它们并行运行,请参阅AsyncTask类文档,但这也会影响应用程序的其余部分。

另请注意,一旦运行AsyncTask,就不允许重复使用它。