2013-09-11 4 views
0

Я пытаюсь отменить свою aynctask, когда пользователь нажимает кнопку «Назад». Я сделал свое исследование о том, какие методы использовать для этой операции, и мне было трудно понять, почему существует более одного метода. Я нашел один метод и попробовал его, но он только отклоняет мой ProgressDialog, и мой aynctassk все еще выполняется. Так может ли кто-нибудь помочь мне в этом вопросе о том, чтобы моя асинтеза отклонила правильный путь.Задняя кнопка только отклоняет диалог прогресса, а не AsyncTask

@Override 
public void onBackPressed() 
{    
    /** If user Pressed BackButton While Running Asynctask 
     this will close the ASynctask. 
    */ 
    if (mTask != null && mTask.getStatus() != AsyncTask.Status.FINISHED) 
    { 
     mTask.cancel(true); 
    }   
    super.onBackPressed(); 
    finish(); 
} 


@Override 
protected void onDestroy() { 
    // TODO Auto-generated method stub 


/** If Activity is Destroyed While Running Asynctask 
     this will close the ASynctask. */ 

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

    super.onDestroy(); 

} 

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 


if (pDialog != null) 
{ 
    if(pDialog.isShowing()) 
    { 
     pDialog.dismiss(); 
    } 
     super.onPause(); 

    } 

} 

И, пожалуйста, дайте мне знать, если я должен отправить свой doInBackGround метод вопрос

protected String doInBackground(String... args) { 

    try { 
     Intent in = getIntent(); 
     String searchTerm = in.getStringExtra("TAG_SEARCH"); 
     String query = URLEncoder.encode(searchTerm, "utf-8"); 
     String URL = "http://example.com"; 
     JSONParsser jParser = new JSONParsser(); 
     JSONObject json = jParser.readJSONFeed(URL); 
     try { 

      JSONArray questions = json.getJSONObject("all").getJSONArray("questions"); 

      for(int i = 0; i < questions.length(); i++) { 
       JSONObject question = questions.getJSONObject(i); 


      String Subject = question.getString(TAG_QUESTION_SUBJECT); 
      String ChosenAnswer = question.getString(TAG_QUESTION_CHOSENANSWER); 
      String Content = question.getString(TAG_QUESTION_CONTENT); 



         HashMap<String, String> map = new HashMap<String, String>(); 

         map.put(TAG_QUESTION_SUBJECT, Subject); 
         map.put(TAG_QUESTION_CONTENT, Content); 
         map.put(TAG_QUESTION_CHOSENANSWER, ChosenAnswer); 

         questionList.add(map); 

      } 


      } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

        return null; 

} 
+0

Вы должны добавить слушатель в диалоге прогресса (например, [OnDismissListener] (http://developer.android.com/reference/android/ content/DialogInterface.OnDismissListener.html)) и отменить задачу там. – ozbek

ответ

3

Я думаю, что проблема заключается в методе doInBackground вашего AsyncTask. Когда вы отменяете свою AsyncTask с помощью mTask.cancel(true);, она не отменяет задачу, она просто устанавливает флаг. Вам нужно проверить метод DoInBackground, если задача была отменена (помечена как отмена) и возвращается, если она есть.

Пример:

protected Long doInBackground(URL... urls) { 
     int count = urls.length; 
     long totalSize = 0; 
     for (int i = 0; i < count; i++) { 
      totalSize += Downloader.downloadFile(urls[i]); 
      publishProgress((int) ((i/(float) count) * 100)); 
      // Escape early if cancel() is called 
      if (isCancelled()) break; 
     } 
     return totalSize; 
    } 

Источник: http://developer.android.com/reference/android/os/AsyncTask.html

+0

Я получаю синтаксическую ошибку в 'Downloader', в которой говорится, что' Downloader не может быть разрешен' –

+0

Я также добавил свой метод 'doInBackground' –

+0

Вы видели мой комментарий? –

Смежные вопросы