2012-08-17 39 views
0

最近我跟着一篇關於如何創建一個警告對話框的教程,當我點擊刪除按鈕時,它應該在刪除之前向我顯示一條警告,但它會崩潰。有人能告訴我我的錯誤在哪裏嗎?爲什麼我的警報對話框崩潰

下面是我的代碼:

// Delete button click event 
    btnDeleteEvent.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      // alerting user before deleting event 
      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
        getApplicationContext()); 
      // set title 
      alertDialogBuilder.setTitle("Warning!"); 
      // set dialog message 
      alertDialogBuilder 
        .setMessage("Are you sure to delete event?") 
        .setCancelable(false) 
        .setPositiveButton("Yes", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, 
             int id) { 
            // if yes, deleting event in background 
            // thread 
            new DeleteEvent().execute(); 
           } 
          }) 
        .setNegativeButton("No", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, 
             int id) { 
            // if this button is clicked, just close 
            // the dialog box and do nothing 
            dialog.cancel(); 
           } 
          }); 

      // create alert dialog 
      AlertDialog alertDialog = alertDialogBuilder.create(); 

      // show it 
      alertDialog.show(); 
     } 
    }); 

這裏是我的logcat:

08-18 02:02:45.804: E/AndroidRuntime(1288): FATAL EXCEPTION: main 
08-18 02:02:45.804: E/AndroidRuntime(1288): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at android.view.ViewRoot.setView(ViewRoot.java:509) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at android.app.Dialog.show(Dialog.java:241) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at com.stts.sparetimetradingsystem.employer.EditEventActivity$5.onClick(EditEventActivity.java:270) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at android.view.View.performClick(View.java:2408) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at android.view.View$PerformClick.run(View.java:8816) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at android.os.Handler.handleCallback(Handler.java:587) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at android.os.Handler.dispatchMessage(Handler.java:92) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at android.os.Looper.loop(Looper.java:123) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-18 02:02:45.804: E/AndroidRuntime(1288):  at dalvik.system.NativeStart.main(Native Method) 

回答

5

嘗試使用活動的背景下,而不是應用程序上下文的

+0

他是正確的和更精確AlertDialog.Builder alertDialogBu​​ilder =新AlertDialog.Builder(ouractivity.this); – Akyl 2012-08-17 18:16:30

+0

恩,不應該是yourActivity.this嗎? – Mus 2012-08-17 18:17:53

+0

oh錯別字:p我會改變它 – Akyl 2012-08-17 18:18:35

0

根據this related question,您應該在構造函數中使用this而不是getApplicationContext()

public void onClick(View arg0) { 
    // alerting user before deleting event 
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);