2012-08-17 36 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);