创建 AlertDialog 实例后应用程序已停止错误
Applicaton has stopped error after create instance of AlertDialog
我有一个包含一些 classes 的项目。
扩展 Activity 的一个 class 有一个按钮。
这是class.
的onCreate方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.select_car);
/////// some codes and behaviors here
直到我找到一个作用于按钮的方法。
单击按钮时,一些数据将插入到我的数据库中,
但在此之前,我想得到最终用户的确认,确认他选择的内容是否已更正。
首先,我只想设置一个肯定的答案,这是我在那个特定按钮中所做的。
choose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//i want to get Confirm from end user, so i did this
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplication());
builder.setMessage("Are You Sure To do this?")
.setTitle("Alert");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog dialog = builder.create();
// some data Insert into my DB
}
});
当我 运行 我的项目并实现此 class 时,我在 Android 设备中遇到此错误:
Unfortunately "MyApplicationName" has stopped.
以及来自 android-studio
的日志
10-22 18:36:17.910 14478-14478/com.theonlyone.behtakapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.theonlyone.behtakapp, PID: 14478
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:660)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at android.app.AlertDialog$Builder.show(AlertDialog.java:951)
at com.theonlyone.behtakapp.Car.onClick(Car.java:306)
at android.view.View.performClick(View.java:4470)
at android.view.View$PerformClick.run(View.java:18796)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
at dalvik.system.NativeStart.main(Native Method)
我该怎么办?
$BadTokenException: Unable to add window -- token null is not for an
application
因为在 AlertDialog.Builder
中使用 getApplication()
传递应用程序上下文。
要显示来自当前 Activity 的警报,即 运行 在 AlertDialog.Builder
中传递 Car.this
或 v.getContext()
应该是这样的
choose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//i want to get Confirm from end user, so i did this
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
builder.setMessage("Are You Sure To do this?")
.setTitle("Alert");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// some data Insert into my DB
}
});
builder.show();
}
});
我有一个包含一些 classes 的项目。
扩展 Activity 的一个 class 有一个按钮。 这是class.
的onCreate方法protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.select_car);
/////// some codes and behaviors here
直到我找到一个作用于按钮的方法。
单击按钮时,一些数据将插入到我的数据库中,
但在此之前,我想得到最终用户的确认,确认他选择的内容是否已更正。
首先,我只想设置一个肯定的答案,这是我在那个特定按钮中所做的。
choose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//i want to get Confirm from end user, so i did this
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplication());
builder.setMessage("Are You Sure To do this?")
.setTitle("Alert");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog dialog = builder.create();
// some data Insert into my DB
}
});
当我 运行 我的项目并实现此 class 时,我在 Android 设备中遇到此错误:
Unfortunately "MyApplicationName" has stopped.
以及来自 android-studio
的日志10-22 18:36:17.910 14478-14478/com.theonlyone.behtakapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.theonlyone.behtakapp, PID: 14478
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:660)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at android.app.AlertDialog$Builder.show(AlertDialog.java:951)
at com.theonlyone.behtakapp.Car.onClick(Car.java:306)
at android.view.View.performClick(View.java:4470)
at android.view.View$PerformClick.run(View.java:18796)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
at dalvik.system.NativeStart.main(Native Method)
我该怎么办?
$BadTokenException: Unable to add window -- token null is not for an application
因为在 AlertDialog.Builder
中使用 getApplication()
传递应用程序上下文。
要显示来自当前 Activity 的警报,即 运行 在 AlertDialog.Builder
Car.this
或 v.getContext()
应该是这样的
choose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//i want to get Confirm from end user, so i did this
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
builder.setMessage("Are You Sure To do this?")
.setTitle("Alert");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// some data Insert into my DB
}
});
builder.show();
}
});