尝试显示对话框时应用程序崩溃
App crashed when try to display dialog box
只是一个简单的事情,点击按钮时应用程序应该显示对话框。但是当它被点击时,它崩溃了。而且我不明白 logCat
错误试图说的是什么。
addImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog = new Dialog(getApplication());
dialog.setContentView(R.layout.custom_dialog_box);
dialog.setTitle("Alert Dialog View");
Button btnExit = (Button) dialog.findViewById(R.id.btnExit);
btnExit.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
dialog.dismiss();
}
});
dialog.findViewById(R.id.btnChoosePath)
.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
// activeGallery();
}
});
dialog.findViewById(R.id.btnTakePhoto)
.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
//activeTakePhoto();
}
});
// show dialog on screen
dialog.show();
}
});
xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:background="@color/light_gray"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_height="fill_parent">
<Button
android:onClick="btnChoosePathClicked"
android:id="@+id/btnChoosePath"
android:background="@color/honey_dew2"
android:textColor="@color/black"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:width="200dp"
android:text="From Gallery"/>
<Button
android:onClick="btnTakePhotoClicked"
android:id="@+id/btnTakePhoto"
android:background="@color/honey_dew2"
android:textColor="@color/black"
android:layout_centerHorizontal="true"
android:layout_below="@id/btnChoosePath"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:width="200dp"
android:text="Take Photo"/>
<Button
android:onClick="btnExitClicked"
android:id="@+id/btnExit"
android:background="@color/honey_dew2"
android:textColor="@color/black"
android:layout_centerHorizontal="true"
android:layout_below="@id/btnTakePhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="200dp"
android:text="Exit"/>
</RelativeLayout>
LogCat错误
12-09 17:57:34.344 18804-18804/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:698)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:281)
at com.example.project.myapplication.GUI.AddMoreClaims.onClick(AddMoreClaims.java:68)
at android.view.View.performClick(View.java:4230)
at android.view.View$PerformClick.run(View.java:17660)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
其中 (AddMoreClaims.java:68)
指的是 dialog.show();
。这里有什么问题吗?
Unable to add window -- token null is not for an application
因为getApplication()
重新调整null
。
使用v.getContext()
或ActivityName.this
创建Dialog
对象:
final Dialog dialog = new Dialog(v.getContext());
OR
final Dialog dialog = new Dialog(ActivityName.this);
像下面的代码一样进行 dialog
声明:
对于Activity:
final Dialog dialog = new Dialog(Your_Activity_Name.this);
片段:
final Dialog dialog = new Dialog(getActivity());
您不能使用应用程序上下文创建对话框,您应该使用 Activity 上下文。
new Dialog(MyActivity.this); //if you use Activity
new Dialog(getActivity()); //if you use Fragment
你应该在 activity 中显示你的对话框,而不是在应用程序中。
在您当前打开的 activity 中打开您的对话框,它应该适合您。
正如其他人在上面所说的那样,您的上下文即 getApplication()
是错误的。
这是因为您需要当前 Activity
的 context
才能在其上显示任何内容(弹出窗口、视图、对话框)。
尽管您可以使用 getApplicationContext()
来启动新的 Activity,但您将不得不使用 this
(在 Activity 内)或 getActivity()
在片段内。
的信息
只是一个简单的事情,点击按钮时应用程序应该显示对话框。但是当它被点击时,它崩溃了。而且我不明白 logCat
错误试图说的是什么。
addImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog = new Dialog(getApplication());
dialog.setContentView(R.layout.custom_dialog_box);
dialog.setTitle("Alert Dialog View");
Button btnExit = (Button) dialog.findViewById(R.id.btnExit);
btnExit.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
dialog.dismiss();
}
});
dialog.findViewById(R.id.btnChoosePath)
.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
// activeGallery();
}
});
dialog.findViewById(R.id.btnTakePhoto)
.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
//activeTakePhoto();
}
});
// show dialog on screen
dialog.show();
}
});
xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:background="@color/light_gray"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:layout_height="fill_parent">
<Button
android:onClick="btnChoosePathClicked"
android:id="@+id/btnChoosePath"
android:background="@color/honey_dew2"
android:textColor="@color/black"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:width="200dp"
android:text="From Gallery"/>
<Button
android:onClick="btnTakePhotoClicked"
android:id="@+id/btnTakePhoto"
android:background="@color/honey_dew2"
android:textColor="@color/black"
android:layout_centerHorizontal="true"
android:layout_below="@id/btnChoosePath"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:width="200dp"
android:text="Take Photo"/>
<Button
android:onClick="btnExitClicked"
android:id="@+id/btnExit"
android:background="@color/honey_dew2"
android:textColor="@color/black"
android:layout_centerHorizontal="true"
android:layout_below="@id/btnTakePhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="200dp"
android:text="Exit"/>
</RelativeLayout>
LogCat错误
12-09 17:57:34.344 18804-18804/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:698)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:281)
at com.example.project.myapplication.GUI.AddMoreClaims.onClick(AddMoreClaims.java:68)
at android.view.View.performClick(View.java:4230)
at android.view.View$PerformClick.run(View.java:17660)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
其中 (AddMoreClaims.java:68)
指的是 dialog.show();
。这里有什么问题吗?
Unable to add window -- token null is not for an application
因为getApplication()
重新调整null
。
使用v.getContext()
或ActivityName.this
创建Dialog
对象:
final Dialog dialog = new Dialog(v.getContext());
OR
final Dialog dialog = new Dialog(ActivityName.this);
像下面的代码一样进行 dialog
声明:
对于Activity:
final Dialog dialog = new Dialog(Your_Activity_Name.this);
片段:
final Dialog dialog = new Dialog(getActivity());
您不能使用应用程序上下文创建对话框,您应该使用 Activity 上下文。
new Dialog(MyActivity.this); //if you use Activity
new Dialog(getActivity()); //if you use Fragment
你应该在 activity 中显示你的对话框,而不是在应用程序中。 在您当前打开的 activity 中打开您的对话框,它应该适合您。
正如其他人在上面所说的那样,您的上下文即 getApplication()
是错误的。
这是因为您需要当前 Activity
的 context
才能在其上显示任何内容(弹出窗口、视图、对话框)。
尽管您可以使用 getApplicationContext()
来启动新的 Activity,但您将不得不使用 this
(在 Activity 内)或 getActivity()
在片段内。