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