2011-04-28 3 views
4

getApplicationContext() 함수를 사용하여 대화 상자를 만들고 있는데, 이로 인해 dialog.show()를 호출 할 때 프로그램이 중단됩니다. 여기dialog.show()에서 Android 충돌이 발생합니다.

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] 

모든 아이디어를 어떻게 해결하기를 나는이 같은 Camera.PictureCallback (내 열린 대화를) 만들려고 노력하고 있기 때문에 나는 getApplicationContext()를 사용하고 있습니다 이?

+0

충돌 로그를 표시 할 수 있습니까? – MByD

답변

9

당신이 활동 안에있는 경우 (예를 들어 MyActivity)는, 당신은 대화 만들 수 있습니다

Dialog dialog = new Dialog(this); 

또는 당신이 Activity의 내부 클래스 안에있는 경우 : 그렇지 않으면

Dialog dialog = new Dialog(MyActivity.this); 

당신은 할 수 getBaseContext()을 사용해보십시오.
UI 스레드에서 작업하고 있는지 확인하십시오.

+1

훌륭해, 고마워! –

-1

이 지속은 또한 당신의 상황을 확인 발생하면 dialog.show(); 에 당신 점점 예외가 context.dialog.show();

을 시도하십시오.