2014-11-09 49 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”是指。