마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 스튜디오에서 AsyncTask 내에 다이얼로그 사용 하면 앱이 죽습니다.

0 추천

이클립스에서는 잘 되던 코드가 안드로이드 스튜디오로 가니 동작을 안하네요.

public class DisplayProg extends AsyncTask<Integer, String, Integer> {

 

 

private ProgressDialog mDlg;

private Context mContext;

 

public DisplayProg(Context context) {

mContext = context;

}

 

@Override

protected void onPreExecute() {

mDlg = new ProgressDialog(mContext);

mDlg.setProgressStyle(ProgressDialog.STYLE_SPINNER);

mDlg.setMessage("test.....");

mDlg.show();

 

super.onPreExecute();

}

 

로그캣보니 .show() 가 안되는거 같아보이거든

 

안드로이드 스튜디오에서는 안되는건가요?

 

 

03-26 20:28:22.849: E/AndroidRuntime(17528): FATAL EXCEPTION: main

03-26 20:28:22.849: E/AndroidRuntime(17528): Process: com.allsmartlab.mic_sensor_demo_for_intermediate, PID: 17528
03-26 20:28:22.849: E/AndroidRuntime(17528): java.lang.IllegalStateException: Could not execute method of the activity
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.view.View$1.onClick(View.java:3969)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.view.View.performClick(View.java:4637)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.view.View$PerformClick.run(View.java:19422)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.os.Handler.handleCallback(Handler.java:733)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.os.Handler.dispatchMessage(Handler.java:95)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.os.Looper.loop(Looper.java:136)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.app.ActivityThread.main(ActivityThread.java:5591)
03-26 20:28:22.849: E/AndroidRuntime(17528): at java.lang.reflect.Method.invokeNative(Native Method)
03-26 20:28:22.849: E/AndroidRuntime(17528): at java.lang.reflect.Method.invoke(Method.java:515)
03-26 20:28:22.849: E/AndroidRuntime(17528): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
03-26 20:28:22.849: E/AndroidRuntime(17528): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
03-26 20:28:22.849: E/AndroidRuntime(17528): at dalvik.system.NativeStart.main(Native Method)
03-26 20:28:22.849: E/AndroidRuntime(17528): Caused by: java.lang.reflect.InvocationTargetException
03-26 20:28:22.849: E/AndroidRuntime(17528): at java.lang.reflect.Method.invokeNative(Native Method)
03-26 20:28:22.849: E/AndroidRuntime(17528): at java.lang.reflect.Method.invoke(Method.java:515)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.view.View$1.onClick(View.java:3964)
03-26 20:28:22.849: E/AndroidRuntime(17528): ... 11 more
03-26 20:28:22.849: E/AndroidRuntime(17528): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.view.ViewRootImpl.setView(ViewRootImpl.java:768)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:278)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.app.Dialog.show(Dialog.java:289)
03-26 20:28:22.849: E/AndroidRuntime(17528): at kr.ftlab.lib.DisplayProg.onPreExecute(DisplayProg.java:24)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
03-26 20:28:22.849: E/AndroidRuntime(17528): at android.os.AsyncTask.execute(AsyncTask.java:535)
03-26 20:28:22.849: E/AndroidRuntime(17528): at kr.ftlab.lib.MDIDetector.start(MDIDetector.java:82)
 
열혈키드 (2,040 포인트) 님이 2015년 3월 26일 질문

2개의 답변

0 추천

다이얼로그를 띄우려면 context 가 아닌 actvity 가 있어야 되요...

activity 도 context 이긴 한데 둘에 확실한 차이점은 모르겠네요..
wifi (1,340 포인트) 님이 2015년 3월 26일 답변
0 추천

http://stackoverflow.com/questions/4329710/android-asynctask-progressdialog-will-not-open-in-activitygroup

찾아보니 context쪽 문제인 것 같습니다. dialog 생성시 상기 링크에 있는 것 처럼 아래 함수를 사용해보세요.

private Context getDialogContext() {
    Context context;
    if (getParent() != null) context = getParent();
    else context = this;
    return context;
}
소소한공방 (180 포인트) 님이 2015년 3월 26일 답변
...