2013-07-27 3 views
0

내 활동에는 인터넷에 연결하여 데이터베이스에 데이터를 저장하는 비동기 작업이 있습니다. 이 작업은 내가 예외거야 실행되는 동안 나는 방향을 변경할 때 는 :오리엔테이션 변경에 지연을 설정하는 방법이 있습니까?

 @Override 
     protected void onPreExecute() { 
      isRefreshing = true; 
      this.dialog.setMessage("Lädt Daten..."); 
      this.dialog.show(); 
     } 
     @Override 
     protected void onPostExecute(String successful) { 
      if (!isFinishing()) { 
       if (successful.equals("succeed")) { 
        Toast toast = Toast.makeText(context, R.string.toast_refresh_succeed, Toast.LENGTH_LONG); 
        toast.show(); 
       } 
       else if (successful.equals("failed")) { 
        Toast toast = Toast.makeText(context, R.string.toast_refresh_failed, Toast.LENGTH_LONG); 
        toast.show(); 
       } 
       if (this.dialog.isShowing()) { 
        this.dialog.dismiss(); 
       } 
      } 
     } 

내가 지금 원하는 것은을 설정하는 것입니다 :

07-27 16:01:45.956 10173-10173/de.MayerhoferSimon.Vertretungsplan E/AndroidRuntime: FATAL EXCEPTION: main 
     java.lang.IllegalArgumentException: View not attached to window manager 
     at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:668) 
     at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:364) 
     at android.view.WindowManagerImpl$CompatModeWrapper.removeView(WindowManagerImpl.java:163) 
     at android.app.Dialog.dismissDialog(Dialog.java:347) 
     at android.app.Dialog.dismiss(Dialog.java:330) 
     at de.MayerhoferSimon.Vertretungsplan.MainActivity$1.onPostExecute(MainActivity.java:129) 
     at de.MayerhoferSimon.Vertretungsplan.MainActivity$1.onPostExecute(MainActivity.java:90) 
     at android.os.AsyncTask.finish(AsyncTask.java:631) 

을 그래서 이것은 내 AsyncTask를 모습입니다 것입니다 오리 엔테이션 변경을 지연 시키면 다시 발생하지 않으며 오리엔테이션은 AsyncTask가 완료 될 때만 변경됩니다.

+1

http://stackoverflow.com/questions/3821423/background-task-progress-dialog-orientation-change-is-there-any-100-working/3821998#3821998. 이것이 도움이 될지 확인하십시오. – Raghunandan

+0

http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html 조각을 사용하는 것이 여기 있습니다. – Raghunandan

답변

0

플랫폼의 설계된 흐름을 뒤집을 필요가있는 경우 아마도 뭔가 잘못된 행동을하고있을 것입니다. 또한 activity가 일시 중지 된 경우 (예 : 사용자가 홈 키를 누름)를 포함하여 this.dialog.isShowing()이 유효하지 않은 경우가 많으므로 모든 시나리오에서 사용할 수있는 일반적인 솔루션을 사용해야합니다.

제공되는 솔루션 here이 문제를 해결해야합니다.

관련 문제