2012-12-20 6 views
1

이 호출은 onCreate로 수행됩니다비동기 작업 - 포스 가까이

class retreive extends AsyncTask<Void,Void,Void>{ 
    ProgressDialog dialog = new ProgressDialog(busDisp.this); 

    @Override 
    protected void onPreExecute(){ 
     this.dialog.setMessage("Retreiving Bus Routes..."); 
     this.dialog.show(); 
     this.dialog.setCancelable(false); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     busRouteJsonParsing(); 
     this.dialog.dismiss(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void voids){ 
      setContentView(R.layout.buses); 
      stop1.setText(Integer.valueOf(stopsCtr[0]).toString()+" stops"); 
      stop2.setText(Integer.valueOf(stopsCtr[1]).toString()+" stops"); 
      stop3.setText(Integer.valueOf(stopsCtr[2]).toString()+" stops"); 
      stop4.setText(Integer.valueOf(stopsCtr[3]).toString()+" stops"); 
      dur1.setText(dur[0]); 
      dur2.setText(dur[1]); 
      dur3.setText(dur[2]); 
      dur4.setText(dur[3]); 
      this.dialog.dismiss(); 
    } 

PostExecute

이에이 후 8 onClicks을 있습니다

new retreive().execute(); 

asyncTask 클래스는 다음과 같습니다 로그 :

12-20 19:55:57.701: E/WindowManager(982): Activity com.example.Try1.busDisp has leaked window [email protected] that was originally added here 
12-20 19:55:57.701: E/WindowManager(982): android.view.WindowLeaked: Activity com.example.Try1.busDisp has leaked window [email protected] that was originally added here 
12-20 19:55:57.701: E/WindowManager(982): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:344) 
12-20 19:55:57.701: E/WindowManager(982): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267) 
12-20 19:55:57.701: E/WindowManager(982): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215) 
12-20 19:55:57.701: E/WindowManager(982): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140) 
12-20 19:55:57.701: E/WindowManager(982): at android.view.Window$LocalWindowManager.addView(Window.java:537) 
12-20 19:55:57.701: E/WindowManager(982): at android.app.Dialog.show(Dialog.java:278) 
12-20 19:55:57.701: E/WindowManager(982): at com.example.Try1.busDisp$retreive.onPreExecute(busDisp.java:249) 
12-20 19:55:57.701: E/WindowManager(982): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561) 
12-20 19:55:57.701: E/WindowManager(982): at android.os.AsyncTask.execute(AsyncTask.java:511) 
12-20 19:55:57.701: E/WindowManager(982): at com.example.Try1.busDisp.onCreate(busDisp.java:91) 
12-20 19:55:57.701: E/WindowManager(982): at android.app.Activity.performCreate(Activity.java:4465) 
12-20 19:55:57.701: E/WindowManager(982): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
12-20 19:55:57.701: E/WindowManager(982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931) 
12-20 19:55:57.701: E/WindowManager(982): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 
12-20 19:55:57.701: E/WindowManager(982): at android.app.ActivityThread.access$600(ActivityThread.java:127) 
12-20 19:55:57.701: E/WindowManager(982): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 
12-20 19:55:57.701: E/WindowManager(982): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-20 19:55:57.701: E/WindowManager(982): at android.os.Looper.loop(Looper.java:137) 
12-20 19:55:57.701: E/WindowManager(982): at android.app.ActivityThread.main(ActivityThread.java:4441) 
12-20 19:55:57.701: E/WindowManager(982): at java.lang.reflect.Method.invokeNative(Native Method) 
12-20 19:55:57.701: E/WindowManager(982): at java.lang.reflect.Method.invoke(Method.java:511) 
12-20 19:55:57.701: E/WindowManager(982): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
12-20 19:55:57.701: E/WindowManager(982): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
12-20 19:55:57.701: E/WindowManager(982): at dalvik.system.NativeStart.main(Native Method) 
,

나는 라인에 가까운 힘을 얻고 249

답변

0

당신은 당신의 싹둑에 줄 번호를 포함하지 않은 있지만 충돌 그것은 아마도 당신이 대화 상자를 만들어야합니다, 윈도우 토큰에 문제처럼 보인다 onPreExecute()에서 일어나는 onPreExecute()에서 처음부터 또는 onCreate()에 만들고 수업 구성원이되도록하면 AsyncTask에 쉽게 액세스 할 수 있습니다.

대화 상자에서 다른 모든 항목을 설정 한 후에는 show()으로 전화해야합니다. 표시되는 동안 상태가 변경되는 것을 방지 할 수 있습니다.

0

doinbackground 프로세스에서 this.dialog.dismiss();을 사용하지 마십시오. 비동기 작업 Doinbackground 프로세스에서 UI 업데이트가 작동하지 않습니다. 모든 UI 업데이트는 게시 실행 및 사전 실행에서만 작동합니다 ..

희망이 도움이 될 것입니다.