2014-11-09 3 views
0

У меня проблема с AsyncTask. У меня есть Activity с тремя CheckBox, если при проверке запускается асинхронная задача, когда пользователь нажимает кнопку. Мой асинхронное этоProgressDialog не уволен в AsyncTask

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

String valore 

      public MyTask(String valore) { 
       this.valore = valore; 
      } 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       progressDialog = new ProgressDialog(MainActivity.this); 
       progressDialog.setMessage(getString(R.string.message)); 
       progressDialog.setIndeterminate(true); 
       progressDialog.show(); 
      } 

      @Override 
      protected Void doInBackground(Void... params) { 
       // TODO Auto-generated method stub 
       // Exec some operations 

       return null; 
      } 

      @Override 
      protected void onPostExecute(Void result) { 
       super.onPostExecute(result); 
       if(risultato != null) { 
        textView.append(risultato); 
       } 
       if(errori != null) { 
        textView.append(errori); 
       } 
       progressDialog.dismiss(); 
      } 

     } 

И кнопка

button.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if(checkBox.isChecked()) { 
        new MyTask("string").execute(); 
       } 
       if(checkBox2.isChecked()) { 
        new MyTask("string2").execute(); 
       } 
       if(checkBox3.isChecked()) { 
        new MyTask("string3").execute(); 
       } 
      }   
     }); 

Проблема заключается в том, что если два или три Флажке которые проверяли ProgressDialog не отвергались и остаются на экране. Зачем? Как я могу отклонить его также, когда отмечены два или более флажка?

ответ

1
try { 
          if ((pDialog != null) && pDialog.isShowing()) { 
           pDialog.dismiss(); 
          } 
         } catch (final IllegalArgumentException e) { 
          // Handle or log or ignore 
         } catch (final Exception e) { 
          // Handle or log or ignore 
         } finally { 

          pDialog = null; 
         } 

Попробуйте отклоняя диалог, как это он может решить вашу проблему

Есть проблема в этом коде

public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if(checkBox.isChecked()) { 
        new MyTask("string").execute(); 
       } 
       if(checkBox2.isChecked()) { 
        new MyTask("string2").execute(); 
       } 
       if(checkBox3.isChecked()) { 
        new MyTask("string3").execute(); 
       } 
      }   

это besically логическая ошибка, если мы сохнуть запустите этот код, он будет выполнить столько раз, сколько увеличивается количество отмеченных флажков. Предположите, что вы делаете CheckBox1 чтобы проверили он будет выполнять асинхронные 1 разы в то время как при нажатии checkbox2 он будет выполнять CheckBox1 асинхронной, а также checkbox2 асинхронной и так на так изменить состояние на кнопке onclicklistner

0

Привет Поскольку вы каждый раз создаете новый progressDialog, поэтому его не увольняют. Создайте только одну и сохраните переменную на общем месте. Например,

@Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       if(progressDialog!=null){ 
       progressDialog = new ProgressDialog(MainActivity.this); 
       progressDialog.setMessage(getString(R.string.message)); 
       progressDialog.setIndeterminate(true); 
       progressDialog.show(); 
       } 
      } 
0

Что вы делаете в методе doInBackground, пожалуйста, напишите этот код. И что такое «ризултато» и «ошибка».

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