2014-11-09 88 views
0

我有一個AsyncTask問題。我有一個活動與三個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一個邏輯上的錯誤,如果我們幹運行這個代碼,它將會在選中的複選框數量增加的情況下執行儘可能多的時間。 假設你做檢查,而當你點擊checkbox2它將執行checkbox1異步以及checkbox2異步 ,它是這樣的,從而改變按鈕上的條件,將執行異步1次 的checkbox1 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」方法中做什麼,請寫下該代碼。 什麼是「risultato」和「errori」是指。