android取消了之前的http获取请求



我想根据web服务的建议创建一个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调用此函数。现在,当快速输入文本时,我想在收到新请求时取消挂起的请求。如何取消以前的请求?

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

您可以使用Android截击网络工具kid来取消HttpRequest,

如果HttpClient.execute()可以被中断,那么如果您通过(true),AsyncTask.cancel(true)将执行此操作。医生没有说它是否可以中断,实验一下。如果没有,那么您可能需要调查另一个答案中建议的工具包。无论如何,您可以检查isCancelled(),而不应用结果。一旦连接启动,可能不会有太大的开销。

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

还要注意,AsyncTask一旦运行,就不允许再使用它。

最新更新