我想根据网络服务的建议创建一个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
调用此函数。现在,当快速输入文本时,我想在新请求到达时取消待处理的请求。如何取消之前的请求?
答案 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,就不允许重复使用它。