![](/img/trans.png)
[英]ProgressDialog is never dismissed when fetching JSON with AsyncTask
[英]ProgressDialog not dismissed in AsyncTask
我有一个AsyncTask问题。 我有一个带有三个CheckBox的Activity,如果选中该复选框,则当用户按下按钮时启动异步任务。 我的异步是这样
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,而是将其保留在屏幕上。 为什么? 选中两个或多个复选框时,如何也将其关闭?
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异步以及checkbox2异步,依此类推,因此请更改onclicklistner按钮上的条件
您好,由于您每次都创建一个新的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”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.