ProgressDialog不会在AsyncTask中解散()

时间:2013-01-20 19:52:41

标签: android android-asynctask progressdialog

我想在AsyncTask中显示ProgressDialog。 这太棒了。但如果我在mLoginPD.dissmiss()中拨打onPostExecute(),请不要运行。

ProgressDialog始终在屏幕上。

这是我的代码:

SherlockActivity mActivity;
ProgressDialog mLoginPD;

public Task_Login(String name, String pass, SherlockActivity activity) {
    this.passwort = pass;
    this.benutzername = name;
    this.mActivity = activity;
}

protected void onPreExecute() {
    super.onPreExecute();

    mLoginPD = new ProgressDialog(mActivity);
    mLoginPD.show(mActivity, "Login", "Logge Spieler ein...");
}

protected void onPostExecute(Void result) {             
    Log.e("hello", "hello");

    mLoginPD.dismiss();
    mLoginPD.cancel();
    if(mLoginPD.isShowing()) {
        mLoginPD.dismiss();
    }
}

onPostExecute()调用。我可以在LogCat中看到“你好”。

(我有doInBackground(),但我无关紧要)

3 个答案:

答案 0 :(得分:3)

问题是您正在创建两个ProgressDialog个对象。

这一行:

mLoginPD = new ProgressDialog(mActivity);

创建一个对话框并将其分配给mLoginPD,但不会显示。

这一行:

mLoginPD.show(mActivity, "Login", "Logge Spieler ein...");

创建另一个对话框并显示一个。问题是show()是一个静态方法,它创建并显示一个对话框。所以它正在创建第二个与mLoginPD分开的显示。永远不会显示mLoginPD,因此调用dismiss()cancel()不会执行任何操作。

您需要做的是:

mLoginPD = ProgressDialog.show(mActivity, "Login", "Logge Spieler ein...");

取代这两行。这会使用show()创建并显示对话框,并将其分配给mLoginPD,以便您以后可以将其解除。

答案 1 :(得分:2)

如果你要覆盖onPreExecute,我不认为你应该调用super.onPreExecute()?

答案 2 :(得分:0)

Geobits的答案也在运行。始终显示NullPointerException

以下是解决我问题的代码:

mLoginPD = new ProgressDialog(mActivity);
mLoginPD.setTitle("Login");
mLoginPD.setMessage("Logge Spieler ein...");
mLoginPD.show();

我可以在mLoginDP.dismiss()

中致电cancel()onPostExecute()