我有一个简单的应用,当我点按Exit
以显示AlertDialog
时,应用会崩溃。
代码:
final ImageView Exit = (ImageView) findViewById(R.id.imageView3);
Exit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mp.pause();
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
getBaseContext());
// set title
alertDialogBuilder.setTitle("Do you want to Exit?...");
// Setting Icon to Dialog
alertDialogBuilder.setIcon(R.drawable.exit2);
// set dialog message
alertDialogBuilder
.setMessage("")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0,
int arg1) {
finish();
// close();
}
})
.setNeutralButton("Rate us!",
new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0,
int arg1) {
{
Uri uri = Uri
.parse("market://details?id="
+ getPackageName());
Intent goToMarket = new Intent(
Intent.ACTION_VIEW, uri);
try {
startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
Toast.makeText(
getApplicationContext(),
"Couldn´t launch Google Play",
Toast.LENGTH_LONG)
.show();
}
}
}
})
.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的:
03-13 01:13:00.084: I/Choreographer(918): Skipped 57 frames! The application may be doing too much work on its main thread.
03-13 01:13:12.114: D/AndroidRuntime(918): Shutting down VM
03-13 01:13:12.124: W/dalvikvm(918): threadid=1: thread exiting with uncaught exception (group=0x41465700)
03-13 01:13:12.145: E/AndroidRuntime(918): FATAL EXCEPTION: main
03-13 01:13:12.145: E/AndroidRuntime(918): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
03-13 01:13:12.145: E/AndroidRuntime(918): at android.view.ViewRootImpl.setView(ViewRootImpl.java:563)
03-13 01:13:12.145: E/AndroidRuntime(918): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:269)
03-13 01:13:12.145: E/AndroidRuntime(918): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
03-13 01:13:12.145: E/AndroidRuntime(918): at android.app.Dialog.show(Dialog.java:281)
03-13 01:13:12.145: E/AndroidRuntime(918): at rain.dreams.MainActivity$3.onClick(MainActivity.java:116)
03-13 01:13:12.145: E/AndroidRuntime(918): at android.view.View.performClick(View.java:4240)
03-13 01:13:12.145: E/AndroidRuntime(918): at android.view.View$PerformClick.run(View.java:17721)
03-13 01:13:12.145: E/AndroidRuntime(918): at android.os.Handler.handleCallback(Handler.java:730)
03-13 01:13:12.145: E/AndroidRuntime(918): at android.os.Handler.dispatchMessage(Handler.java:92)
03-13 01:13:12.145: E/AndroidRuntime(918): at android.os.Looper.loop(Looper.java:137)
03-13 01:13:12.145: E/AndroidRuntime(918): at android.app.ActivityThread.main(ActivityThread.java:5103)
03-13 01:13:12.145: E/AndroidRuntime(918): at java.lang.reflect.Method.invokeNative(Native Method)
03-13 01:13:12.145: E/AndroidRuntime(918): at java.lang.reflect.Method.invoke(Method.java:525)
03-13 01:13:12.145: E/AndroidRuntime(918): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-13 01:13:12.145: E/AndroidRuntime(918): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-13 01:13:12.145: E/AndroidRuntime(918): at dalvik.system.NativeStart.main(Native Method)
03-13 01:13:14.864: I/Process(918): Sending signal. PID: 918 SIG: 9
答案 0 :(得分:1)
可能getBaseContext()
导致问题,因此请使用当前的Activity上下文创建Alert as:
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
MainActivity.this);