Java AsyncTask中未解除ProgressDialog
我对异步任务有问题。我有一个带有三个复选框的活动,如果选中,则在用户按下按钮时启动异步任务。我的异步是这样的Java AsyncTask中未解除ProgressDialog,java,android,Java,Android,我对异步任务有问题。我有一个带有三个复选框的活动,如果选中,则在用户按下按钮时启动异步任务。我的异步是这样的 private class MyTask extends AsyncTask<Void, Void, Void> { String valore public MyTask(String valore) { this.valore = valore; } @O
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();
}
}
问题是,如果选中了两个或三个复选框,则ProgressDialog不会被取消并保持在屏幕上。为什么?当选中两个或多个复选框时,如何取消选中
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();
}
}
这实际上是一个逻辑错误,如果我们干运行此代码,它将
随着选中复选框数量的增加,执行的次数相同。
假设您执行checkbox1以选中它将执行异步1次
当您单击checkbox2时,它将执行checkbox1 async以及checkbox2 async
如果是这样的话,那么在ClickListner上更改按钮的条件
您好,因为您每次都在创建一个新的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();
}
}
你在用“doInBackground”方法做什么?请也写那个代码。
“risultato”和“errori”指的是什么
@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();
}
}