我正在使用ProgressDialog
显示我的后台进程,但在后台进程完成后,ProgressDialog仍然没有被解雇。
这是我的代码
private class async extends AsyncTask<String, Void, Boolean> {
final ProgressDialog progressDialog = new ProgressDialog(getParent());
@Override
protected Boolean doInBackground(String... params) {
GetJson json = new GetJson();
boolean success = false;
JSONObject mJsonObject = json
.readJsonObject("url");
try {
success = mJsonObject.getBoolean("success");
} catch (Exception e) {
}
return success;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
if (progressDialog.isShowing())
progressDialog.dismiss();
}
}
}
@SuppressWarnings("static-access")
@Override
protected void onPreExecute() {
progressDialog.show(getParent(), "Working..", "Please wait...");
}
}
你可以在你的progressDialog.dismiss()
的AsyncTask
方法中调用onPostExecute()
。
private final class YourTask extends AsyncTask<Void, Void, Object> {
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(YourActivity.this, "Title", "Message", true);
}
@Override
protected Object doInBackground(final Void... params) {
// Doing something
}
@Override
protected void onPostExecute(final Object result) {
// Check result or something
dialog.dismiss();
}
}
在onPostExecute()
方法中,在对话框中调用dismiss()
。
我不知道,如果你解决了这个问题,可能是的。
但对于下一个用户会有同样的问题(我现在也有)..
问题出在你的声明中。
final ProgressDialog progressDialog = new ProgressDialog(getParent());
或者在你的“第二次”声明中
progressDialog.show(getParent(), "Working..", "Please wait...");
因为在第一个中你放入了getParent参数(可能是MainActivity.this)和你在调用show方法时所做的相同。因此有2个父母..如果你在post执行中调用dismiss(),则忽略第一个..但不是另一个什么然后dialog.isShowing()等于false。
非常重要的是只有1 !!!!!父内容..所以你可以在声明中分配内容:
new ProgressDialog(content);
或者你可以做
ProgressDialog dialog=new ProgressDialog();
dialog.setMessage("Loading");
dialog.show(getParent());
然后解雇它,一切都没问题。或者你可以这样做:
ProgressDialog dialog=new ProgressDialog(getParent());
dialog.setMessage("Loading");
dialog.show();
但从来没有给过两次父母,内容,等等......
AsyncTasks不应该处理所有对话框。在PostExecute阶段解除对话框很容易导致IllegalStateException,因为当对话框被解除时,底层活动已经被销毁。在销毁活动之前,将保存活动的状态。之后解除对话将导致状态不一致。