/ / AlertDialog in AndEngine - android a andengine

AlertDialog in AndEngine - android, andengine

Snažím sa ukázať výstražný dialóg, ale stále sa mi zobrazuje táto chyba

01-24 21:52:45.640: E/AndroidRuntime(31119): FATAL EXCEPTION: UpdateThread
01-24 21:52:45.640: E/AndroidRuntime(31119): java.lang.RuntimeException: Can"t create handler inside thread that has not called Looper.prepare()
01-24 21:52:45.640: E/AndroidRuntime(31119):    at android.os.Handler.<init>(Handler.java:121)
01-24 21:52:45.640: E/AndroidRuntime(31119):    at android.app.Dialog.<init>(Dialog.java:100)
01-24 21:52:45.640: E/AndroidRuntime(31119):    at android.app.AlertDialog.<init>(AlertDialog.java:96)
01-24 21:52:45.640: E/AndroidRuntime(31119):    at android.app.AlertDialog$Builder.create(AlertDialog.java:891)

Poukazuje na túto čiaru

 @Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 1:
isGameRunning = false;
gameStarted = false;
mEngine.stop();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("How To Play");
builder.setIcon(R.drawable.ic_launcher);



final AlertDialog alert = builder.create(); //this line

builder.setPositiveButton("Thanks", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
alert.dismiss();
isGameRunning = true;
mEngine.start();
gameStarted = true;

}
});
return alert;
default:
return null;
}

}

odpovede:

3 pre odpoveď č. 1

Z nejakého dôvodu to vyzerá ako metóda onCreateDialog je volaná z UpdateThread of AndEngine (Aj keď by mala byť vyvolaná z vlákna UI).

Nezabudnite, že keď zobrazíte dialógové okno, zavoláte showDialog(int id) radšej než onCreateDialog(int id), Po zavolaní showDialog, Android zavolá onCreateDialog pokiaľ je to možné, na vlákno používateľského rozhrania.

V skutočnosti som sa pozrel dovnútra ShowDialog informácie teraz a je zastarané, vyzerá to, že existuje úplne nový spôsob vytvárania dialógov. Čítaj viac tu.


6 pre odpoveď č. 2

Zavolajte showDialog z UIThread.

this.runOnUiThread(new Runnable() {
@Override
public void run() {
MyActivity.this.showDialog(MY_DIALOG_ID);
}
});

Oh a NIE, NIE, NIE, NIE, NIE, NIE, NIE, NIE:

case 1:

1 pre odpoveď č. 3

skúste to

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 1:
isGameRunning = false;
gameStarted = false;
mEngine.stop();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("How To Play")
.setIcon(R.drawable.ic_launcher)
.setPositiveButton("Thanks", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
isGameRunning = true;
mEngine.start();
gameStarted = true;

}
});
return builder.create();
default:
return null;
}
}