1

我想在 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() 但我无关紧要)

4

3 回答 3

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以便您以后可以将其关闭。

于 2013-01-20T20:47:39.270 回答
2

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

于 2013-01-20T20:31:35.287 回答
0

Geobits 的答案也在运行。总是显示一个NullPointerException.

这是解决我的问题的代码:

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

我不能打电话mLoginDP.dismiss()cancel()打电话onPostExecute()

于 2013-01-20T20:59:20.167 回答