2012-01-25 15 views
0

我試圖表現出alertdialog但我不斷收到此錯誤AlertDialog在AndEngine

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) 

它是指向該行

@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; 
    }  

}

回答

3

這似乎是,由於某種原因,米從AndEngine的UpdateThread調用方法onCreateDialog(雖然它應該從UI線程中調用)。

請記住,當您顯示對話框時,請致電showDialog(int id)而不是onCreateDialog(int id)。致電showDialog後,Android會盡可能在UI線程上調用onCreateDialog

實際上,我現在查看了showDialog信息,它已被棄用,它看起來像有一種全新的創建對話框的方式。閱讀更多here

1

試試這個

@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; 
    }  
} 
6

調用來自UIThread的showDialog。

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

Oh和NO,NO,NO,NO,NO,NO,NO,NO:

case 1: 
+0

從該方法我應該調用此runOnUiThread()?我想把用戶名作爲輸入。我正在使用SimpleBaseGameActivity。我試圖在返回之前從onCreateScene()運行它;但我的UI會變形。 –

+0

我的意思是我從一個外部類與SimpleBaseGameActivity的上下文中調用它,但在輸出中,我只是得到我的實際背景圖像的一部分,它是波動的,其他部分是黑色的。 –