2014-12-06 3 views
-1

Я запускаю задачу async в android для ping t конкретного URL-адреса, но проблема в том, что URL-адрес недействителен или недоступен. Исключение возникает как событие sockettimeoutexception, поэтому в этом исключении я хочу остановить запущенную задачу. iagve попытался использовать метод Cancel(), но это приводит к сбою приложения.как остановить выполнение задачи async?

Я использую следующий код.

private class UrlDataProvider3 extends AsyncTask<String, Void, String> 
{ 

    String ret=""; 
    int checkStatus; 
    Boolean exception=false; 
    @Override 
    protected String doInBackground(String... url) 
    { 

     HttpURLConnection con = null; 

     try 
      { 

      Log.i("RAE", "urlData"+url[0]); 
      HttpURLConnection.setFollowRedirects(true); 
      con = (HttpURLConnection) new URL(url[0]).openConnection(); 
       con.setRequestMethod("POST"); 
       con.setConnectTimeout(20000); 




      } 


     catch (IOException e) 
      { 


      if(e.toString().contains("java.net.SocketTimeoutException:")) 
      { 



       return null; 

      } 



      } 



    return ret; 
    } 
    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     Log.i("RAE"," Asyc finished"); 



} 

ответ

0

вы сделать что-то вроде этого:

if((this.downloadNetTask != null) 
     && (this.downloadNetTask.getStatus() != AsyncTask.Status.FINISHED)){ 
     this.downloadNetTask.cancel(true); 
} 

Где downloadNetTask является экземпляром вас асинхронная задача. В своей асинхронной задаче выполните следующие действия, чтобы сделать то, что вы хотите, когда задача отменена.

protected void onCancelled(List<CompanyNseQuoteDataVO> result) 

protected void onCancelled() 
+0

Приложение терпит крах и показывает задачу Исключение исключения –

+0

вставьте трассировку стека здесь. – Nazgul

+0

12-06 10: 42: 06.192: E/AndroidRuntime (31001): FATAL EXCEPTION: main 12-06 10: 42: 06.192: E/AndroidRuntime (31001): java.util.concurrent.CancellationException –

0

Дело в том, что AsyncTask.cancel() вызов только вызывает функцию OnCancel в вашей задаче. Здесь вы хотите обрабатывать запрос отмены.

Вот небольшая задача, я использую, чтобы вызвать метод обновления

private class SomeTask extends AsyncTask<Void, Void, Void> { 

     private boolean running = true; 

     @Override 
     protected void onCancelled() { 
      running = false; 
     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 
      super.onProgressUpdate(values); 
      onUpdate(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      while(running) { 
       publishProgress(); 
      } 
      return null; 
     } 
    } 

Или вы можете проверить свою задачу, как показано ниже.

protected Object doInBackground(Object... x) { 
    while (/* condition */) { 
     // work... 
     if (isCancelled()) 
      break; 
     } 
    return null; 
} 
Смежные вопросы