Android

Unable to add window -- token null is not for an application 에러

void 2017. 7. 14. 15:29
// 사진
AlertDialog.Builder ab = new AlertDialog.Builder(getActivity());
ab.setMessage(R.string.register_content_dialog_text);
ab.setNeutralButton("취소", new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog, int id) {
// 다이얼로그를 취소한다
dialog.cancel();
}
}).setNegativeButton("앨범선택", new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog, int id) {
doTakeAlbumAction();
}
}).setPositiveButton("사진촬영", new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog, int id) {
doTakePhotoAction();
}
});
ab.show();


프래그먼트에서 띄우던 다이얼로그를 그대로 액티비티에서 사용하려했다.


E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.blank.android.crafter, PID: 15491
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:853)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:337)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:350)
at android.app.AlertDialog$Builder.show(AlertDialog.java:1113)
at com.blank.android.crafter.SettingsActivity.onClick(SettingsActivity.java:156)
at android.view.View.performClick(View.java:5697)
at android.view.View$PerformClick.run(View.java:22526)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)


이러한 에러가 났고, 구글링 결과 다이얼로그 생성할 때 

getActivity메소드가 아닌 액티비티명을 적어줘야한다는 것을 보고 

고치니 에러해결

// 사진
AlertDialog.Builder ab = new AlertDialog.Builder(액티비티명.this);
ab.setMessage(R.string.register_content_dialog_text);
ab.setNeutralButton("취소", new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog, int id) {
// 다이얼로그를 취소한다
dialog.cancel();
}
}).setNegativeButton("앨범선택", new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog, int id) {
doTakeAlbumAction();
}
}).setPositiveButton("사진촬영", new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog, int id) {
doTakePhotoAction();
}
});
ab.show();