我正在使用getApplicationContext()函数创建一个对话框,当我调用dialog.show()时,这会导致程序崩溃。我正在使用getApplicationContext(),因为我试图使对话框在Camera.PictureCallback()中打开,像这样:
Camera.PictureCallback pictureCallbackJpeg = new Camera.PictureCallback()
{
public void onPictureTaken(byte[] data, Camera c)
{
Context context = getApplicationContext();
Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.send_dialog);
dialog.setTitle("Send image?");
dialog.show();
camera.startPreview();
}
};
这是崩溃日志:
Thread [<1> main] (Suspended (exception WindowManager$BadTokenException))
Dialog.show() line: 245
myApp$1.onPictureTaken(byte[], Camera) line: 31
Camera$EventHandler.handleMessage(Message) line: 328
Camera$EventHandler(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 143
ActivityThread.main(String[]) line: 4914
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 868
ZygoteInit.main(String[]) line: 626
NativeStart.main(String[]) line: not available [native method]
有什么办法解决这个问题吗?
如果你在一个活动中(比如MyActivity
),你可以创建对话框:
Dialog dialog = new Dialog(this);
或者如果您在Activity
的内部类中:
Dialog dialog = new Dialog(MyActivity.this);
否则你可以试试getBaseContext()
。
你只需要确保你在UI线程中工作
如果您在dialog.show();
上得到异常try context.dialog.show();