我想根据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一旦运行,就不允许再使用它。