2014-11-09 5 views
0

AsyncTask에 문제가 있습니다. 3 개의 CheckBox가있는 Activity가 있는데,이 옵션을 선택하면 사용자가 버튼을 누를 때 비동기 작업을 시작합니다. 내 비동기이AsyncTask에서 ProgressDialog가 해제되지 않았습니다.

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; 
         } 

우리가 건조하면이 besically 논리적 오류가

이 코드

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(); 
       } 
      }   

에 문제가 있습니다 문제 또한 해결할 수있는이 같은 대화 상자를 해산 시도 이 코드를 실행하면 이 체크 된 체크 박스 수가 증가 할 때까지 많은 시간을 실행할 것입니다. 은 그렇게 버튼의 상태를 변경하려면 비동기는 비동기 CheckBox1을 실행합니다 checkbox2뿐만 아니라 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"는 무엇을 나타냅니다.

관련 문제