2015-10-20 6 views
0

Пожалуйста, позвольте мне задать вопрос. У меня есть asyntask и подобный диалог:Как закончить асинхронную работу

private class myAsyncTaskton extends AsyncTask<Void, Void, Boolean> { 
    Exception error; 



    @Override 
    protected void onPostExecute(Boolean result) { 
     if(result){ 
      if(!data.equals("{\"Table\":[]}")){ 
       try { 
        parsejson(); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

      } 
      else{ 
       final Dialog dialog = new Dialog(company_daily_report.this); 
       dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       dialog.setContentView(R.layout.dialog); 
       TextView tvmessage = (TextView) dialog.findViewById(R.id.message); 
       tvmessage.setText("Không có dữ liệu"); 
       Button btcancel = (Button) dialog.findViewById(R.id.buttoncancel); 
       dialog.setCanceledOnTouchOutside(false); 
       btcancel.setText("OK"); 
       btcancel.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         dialog.dismiss(); 
         ####HERE I WANT STOP ASYNSTACK####### 

        } 
       }); 


      dialog.show(); 
      } 

     } else { 
      if (error != null) { 
       final Dialog dialogeror = new Dialog(company_daily_report.this); 
       dialogeror.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       dialogeror.setContentView(R.layout.dialog); 
       TextView tvmessage = (TextView) dialogeror.findView 
      } 
     } 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     //dang xu li 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 

     try{ 
      getdata(); 
      return true; 
     } catch (Exception e){ 
      error =e; 
      return false; 

     } 

    } 
} 

При выполнении этого кода, я получил диалог. Я хочу остановить asyntask из события нажатия диалогового окна кнопки? Как это сделать? Я стараюсь отменить (правда), вернуться, .. но не работает.

+0

[http://stackoverflow.com/questions/18045917/android-stop-asynctask](http://stackoverflow.com/questions/18045917/android-stop-asynctask) –

+0

Я думаю, что когда вы увидите диалог, ваша задача уже закончена. – invisbo

+0

@invisbo вы правы. Я закончил, но я получил два диалога одинаково @@. Как отменить два диалога одним щелчком мыши? – AndroidLTG

ответ

0

Вы должны объявить ваш диалог за пределами метода onPostExecute() .... где вы объявили Exception ....

Сейчас в doInBackground() метод сделать это:

dialog.show(); 

и в onPostExecute():

dialog.dismiss(); 

или и может отклонить его, используя кнопку в самом диалоге ....

0

Вы должны перестроить свой код

private class myAsyncTaskton extends AsyncTask<Void, Void, Boolean> { 
    Exception error; 
    Dialog dialog = new Dialog(company_daily_report.this); 
    Dialog dialogeror = new Dialog(company_daily_report.this); 
    TextView tvmessage = (TextView) dialog.findViewById(R.id.message); 
    Button btcancel = (Button) dialog.findViewById(R.id.buttoncancel); 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     //dang xu li 
    } 


    @Override 
    protected Boolean doInBackground(Void... params) { 

     try{ 
      getdata(); 
      return true; 
     } catch (Exception e){ 
      error =e; 
      return false; 

     } 

    } 


    @Override 
    protected void onPostExecute(Boolean result) { 
     if(result){ 
      if(!data.equals("{\"Table\":[]}")){ 
       try { 
        parsejson(); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

      } 
      else{ 

       dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       dialog.setContentView(R.layout.dialog);     
       tvmessage.setText("Không có dữ liệu");      
       dialog.setCanceledOnTouchOutside(false); 
       btcancel.setText("OK"); 
       btcancel.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         dialog.dismiss(); 
         ####HERE I WANT STOP ASYNSTACK####### 

        } 
       }); 


      dialog.show(); 
      } 

     } else { 
      if (error != null) { 
       dialogeror.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       dialogeror.setContentView(R.layout.dialog); 
       //You can still use your tvmessage.setText("value") here 
      } 
     } 
    } 

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