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

問題は、2つのProgressDialogオブジェクトを作成していることです。

この行:

mLoginPD = new ProgressDialog(mActivity);

ダイアログを作成してに割り当てますが、表示されmLoginPDません。

この行:

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

別のダイアログを作成し、そのダイアログを表示します。問題はshow()、ダイアログをすべて1つに作成して表示する静的メソッドであるということです。つまり、表示されているものとは別の2番目のものを作成して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 に答える