2013-08-02 2 views
0

웹 서비스에서 제안한 내용으로 autoCompleteTextview을 만들고 싶습니다. 텍스트 변경시 텍스트를 입력하여 웹 서비스를 호출합니다.android cancel previous http get request

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 개체를 불필요하게 만들지 않도록 할 수 있습니다. HttpRequest를 취소하기위한

0

HttpClient.execute하면, 안드로이드 발리 네트워크 도구 아이()를 사용하여, 당신은 (true)를 전달하면 그것을 할 것입니다 (사실) AsyncTask.cancel를 중단 할 수 있습니다. 의사는 인터럽트 가능 여부를 말하지 않습니다. 실험하십시오. 그렇지 않은 경우 다른 대답에서 제안 된 툴킷을 조사해야 할 수도 있습니다. 어쨌든 isCancelled()를 검사하고 결과를 적용하지 않을 수 있습니다. 연결이 시작되면 아마도 엄청난 오버 헤드가 아닐 것입니다.

Android 버전에 따라 때로는 여러 개의 AsyncTasks가 동시에 (도넛 형 honecomb) 실행될 수 있으며 때로는 한 번에 하나씩 실행되어 대기열에 올라서게됩니다 (허니 콤 이후). 스레드 실행기를 변경하여 AsynchronousTask 클래스 문서를 참조하면 병렬 실행이 가능하지만 나머지 응용 프로그램에도 영향을 미칩니다.

AsyncTask가 실행되면 다시 사용할 수 없습니다.