0

我想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输入或删除到达字符时调用。现在,当快速输入文本时,我想在新请求到达时取消挂起的请求。如何取消之前的请求?

4

3 回答 3

1

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

于 2013-08-02T12:59:51.347 回答
0

如果 HttpClient.execute() 可以被中断,AsyncTask.cancel(true) 如果你通过 (true) 就会这样做。文档没有说它是否可以中断,请进行实验。如果没有,那么您可能需要调查另一个答案中建议的工具包。无论如何,您可以检查 isCancelled() 而不是应用结果。一旦连接开始,可能不会有很大的开销。

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

另请注意,一旦运行 AsyncTask,您就不能再使用它。

于 2013-08-02T13:37:44.287 回答
0

您可以使用 Android volley network tool kid 取消 HttpRequest,

于 2013-08-02T13:10:18.513 回答