如何从AlertDialog

问题描述:

我试图做一个很简单的事情,显示警报,只有1个按钮,点击,如果我想对话框关闭,比应用程序退出\结束()如何从AlertDialog

退出程序目前我正在使用该设备的通用警报:

应用程序意外停止。请重试

在logcat中我得到:无法暂停活动

这里是日志:

01-03 14:49:00.670: ERROR/AndroidRuntime(22536): Uncaught handler: thread main exiting due to uncaught exception 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536): java.lang.RuntimeException: Unable to pause activity {com.SprintTwo/com.SprintTwo.SprintTwo}: java.lang.NullPointerException 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3162) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3119) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3102) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at android.app.ActivityThread.access$2400(ActivityThread.java:119) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1874) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at android.os.Looper.loop(Looper.java:123) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at java.lang.reflect.Method.invoke(Method.java:521) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at dalvik.system.NativeStart.main(Native Method) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536): Caused by: java.lang.NullPointerException 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at com.phonegap.DroidGap.onPause(DroidGap.java:736) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at com.worklight.androidgap.WLDroidGap.onPause(WLDroidGap.java:163) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at android.app.Activity.performPause(Activity.java:3782) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1190) 
01-03 14:49:00.680: ERROR/AndroidRuntime(22536):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3149) 

这里是我的代码:

buttonClickListener = new AlertDialog.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.dismiss(); 
          finish(); 
         } 

AlertDialog.Builder dlg = new AlertDialog.Builder(context); 
    dlg.setTitle(title); 
    dlg.setMessage(message); 
    dlg.setCancelable(false); 
    dlg.setPositiveButton(buttonText, buttonClickListener); 
    dlg.create(); 
    dlg.show(); 
+0

buttonClickListener在dlg.setPositiveButton中使用它为空,所以当你点击肯定按钮时,你开始NPE – Selvin 2012-01-03 13:33:48

+2

在代码中com.phonegap.DroidGap.onPause(DroidGap.java:736)'' ?当然你没有什么奇怪的东西? – tidbeck 2012-01-03 13:34:56

+0

你能写我们在736行DroidGap.java上有什么吗?另外我很好奇在WLDroidGap.java上的第163行。那里肯定有一些问题。 – 2012-01-03 13:52:48

尝试System.exit(0)而不是finish()

+2

这不是关闭Android应用程序的正确方式,但对于我的特定情况下它的工作...谢谢 – 2012-01-03 14:55:11

尝试,如果工作

private void ConfirmAlert() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("CLOSE"); 
    builder.setMessage("Do You Want to Close the Application").setCancelable(false) 
    .setPositiveButton("Yes", 
      new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      dialog.dismiss(); 
      onYesClick(); 

     } 


    }).setNegativeButton("No", 
      new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      dialog.cancel(); 
      onNoClick(); 
     } 
    }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 
private void onYesClick() { 
    Intent setIntent = new Intent(Intent.ACTION_MAIN); 
    setIntent.addCategory(Intent.CATEGORY_HOME); 
    setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(setIntent); 

    ActivityName.this.finish(); 



}private void onNoClick() { 


} 

的问题是你不能从暂停模式完成的活动。

想法是处理它与国旗。 使用标志检查将退出代码写入Resume()方法中。在对话框中启用标志。

喜欢的东西(下面的代码是假的),

boolean APP_EXIT_FLAG = false; 
Resume(){ 

if(APP_EXIT_FLAG) 
finish(); 

} 

而且你的警告对话框代码,

buttonClickListener = new AlertDialog.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 

          APP_EXIT_FLAG = true; 
          dialog.dismiss(); 
         } 

AlertDialog.Builder dlg = new AlertDialog.Builder(context); 
    dlg.setTitle(title); 
    dlg.setMessage(message); 
    dlg.setCancelable(false); 
    dlg.setPositiveButton(buttonText, buttonClickListener); 
    dlg.create(); 
    dlg.show(); 

希望它能帮助。

+0

从哪里可以打电话给Resume()? – 2012-01-03 14:26:21

+0

如果您的应用程序处于暂停模式,它会自动调用恢复(生命周期方法) – sohilv 2012-01-04 05:22:49