2013-07-12 35 views
0

任何人都可以請幫我解決這個問題。在這裏,我從服務中下載數據,爲此我使用了後臺服務並顯示進度對話框。它在我的手機可以正常使用,但同樣的代碼,使問題在我的平板電腦:BackgroundAsyncTask在平板電腦中出現錯誤

這裏是mycode的:

public class BackgroundAsyncTaskForFirstTimeHitOrCacheExpired extends AsyncTask<String, Void, Boolean> { 
     public ProgressDialog dialog; 
     @Override 
     protected void onPreExecute() { 
      dialog = ProgressDialog.show(HomeActivity.this, "", "Downloading...", true); 
     } 

     @Override 
     protected Boolean doInBackground(String... arg0) { 

        //Download data   
       }  

     @Override 
     protected void onPostExecute(Boolean isServiceValuesFetchedSuccessfully) { 
      dialog.dismiss(); 
      //activity started 

     } 
    } 

這裏是我的logcat錯誤:

07-12 16:31:31.597: E/AndroidRuntime(2493): FATAL EXCEPTION: main 
07-12 16:31:31.597: E/AndroidRuntime(2493): java.lang.IllegalArgumentException: View not attached to window manager 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:385) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:230) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.view.Window$LocalWindowManager.removeView(Window.java:432) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.app.Dialog.dismissDialog(Dialog.java:290) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.app.Dialog.access$000(Dialog.java:78) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.app.Dialog$1.run(Dialog.java:123) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.app.Dialog.dismiss(Dialog.java:280) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at com.cpt.realtor.activity.HomeActivity$BackgroundAsyncTaskForFirstTimeHitOrCacheExpired.onPostExecute(HomeActivity.java:150) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at com.cpt.realtor.activity.HomeActivity$BackgroundAsyncTaskForFirstTimeHitOrCacheExpired.onPostExecute(HomeActivity.java:1) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.os.AsyncTask.finish(AsyncTask.java:417) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.os.AsyncTask.access$300(AsyncTask.java:127) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.os.Looper.loop(Looper.java:123) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at java.lang.reflect.Method.invoke(Method.java:507) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
07-12 16:31:31.597: E/AndroidRuntime(2493):  at dalvik.system.NativeStart.main(Native Method) 

任何人都可以在這方面的幫助? ?

在此先感謝。

+0

爲什麼在創建任務之前不顯示對話框? – vilpe89

回答

0

嗨問題是相對於ProgressDialog(),它的活動開關(帶同一活動期間不隱藏進度條再次打開)。

嘗試隱藏onPause()中的進度對話框並在onResume()上顯示相同的內容。

+1

請查看這篇文章以供參考:http://stackoverflow.com/questions/2224676/android-view-not-attached-to-window-manager –

+0

嘿謝謝Ruppin..It解決了.. – Lokesh

0

可能是你正在傳遞一個錯誤的上下文進度對話框

dialog = ProgressDialog.show(HomeActivity.this, "", "Downloading...", true); 

你肯定HomeActivity不彎腰時,應顯示的進度dialod?

+0

感謝您的快速回復..我只通過正確的上下文,即:HomeActivity.this – Lokesh

2

你可以試試這個。有時候這個問題可能是因爲進度dilog可能沒有正確初始化。不這樣做anythind相關背景與UI即使做一些嘗試,使其在runonUIthread outherwise windowleak可能發生

public class BackgroundAsyncTaskForFirstTimeHitOrCacheExpired extends AsyncTask<String, Void, Boolean> { 
      private ProgressDialog dialog; 
      @Override 
      protected void onPreExecute() { 
       dialog = new ProgressDialog(DictateActivity.this); 
       dialog.setCancelable(false); 
       dialog.setMessage("Downloadin.."); 
       dialog.show(); 
      } 

      @Override 
      protected Boolean doInBackground(String... arg0) { 

         //Download data   
        }  

      @Override 
      protected void onPostExecute(Boolean isServiceValuesFetchedSuccessfully) { 

       dialog.dismiss(); 
       //activity started 

      } 
    } 
+0

感謝您的支持Sreedev。我通過您的建議編輯了我的代碼。現在請看看我的logcat錯誤。以上更新。 – Lokesh

+0

你可以檢查你傳遞的上下文嗎?並且請確認doInBackground(String ... arg0)中沒有UI進程正在執行。這種非法的態度表明該觀點未被正確地附加。有時上下文可能會丟失,並且進度可能無法正確初始化或某些UI進程正在發生在後臺內部。之間也嘗試評論進度dilog代碼。如果您的後臺進程對任何異常都做了正確的處理,那麼您可以確認它是進度稀釋問題。 –

+0

正確加載數據(註釋進度對話框代碼)。並且進度對話框代碼可以在移動設備上正常工作,但不能在平板電腦上工作 – Lokesh