2013-08-02 36 views
0

我想創建一個帶有來自web服務的建議的autoCompleteTextview。在更改文字時,我會用輸入的文字呼叫網絡服務。android取消上一個http獲取請求

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調用此函數。現在,當文本輸入得很快時,我想在新請求到達時取消掛起的請求。我如何取消先前的請求?

回答

1

您可以通過每個排隊的任務並調用cancel()method。使用isCancelled()檢查任務是否被取消。不要爲文本框中的每個更改觸發異步任務。您可以引入一小段延遲,以避免不必要地創建AsyncTask對象。

0

您可以使用Android凌空網絡工具爲孩子取消的HttpRequest,

0

如果HttpClient.execute()可以被打斷,AsyncTask.cancel(真)如果你通過(真)將做到這一點。文檔沒有說明它是否可以中斷,試驗。 如果沒有,那麼你可能需要調查另一個答案中建議的工具箱。 無論如何,你可以檢查isCancelled()並不適用結果。一旦連接啓動,可能不會造成巨大的開銷。

請注意,根據Android版本的不同,有時多個AsyncTasks可以並行運行(donut - honecomb),有時它們只能一次運行一個並排隊(蜂窩向上)。您可以更改線程執行程序以允許它們並行運行,請參閱AsyncTask類文檔,但這也會影響您的其他應用程序。

另請注意,一旦運行AsyncTask,您就不能再次使用AsyncTask。