0

誰でもこの問題を解決するのを手伝ってくれませんか。ここでは、サービスからデータをダウンロードしました。そのために、バックグラウンド サービスを使用し、進行状況ダイアログを表示しました。私のモバイルでは完全に動作しますが、同じコードが私のタブレットで問題を引き起こします:

ここにマイコードがあります:

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)

誰でもこれを助けることができますか??

前もって感謝します。

4

3 に答える 3

2

これを試すことができます。進行状況ダイアログが正しく初期化されていないために、問題が発生することがあります。runonUIthread で実行しようとしても、バックグラウンドで UI に関連する操作を行わないでください。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

            }
    }
于 2013-07-12T10:56:15.050 に答える
0

こんにちは、この問題は、アクティビティの切り替え中に非表示にならない ProgressDialog() に関するものです (進行状況バーが再び開かれた同じアクティビティ)。

onPause() で進行状況ダイアログを非表示にし、onResume() で同じように show() を試してください。

于 2013-07-12T11:08:11.857 に答える
0

進行状況ダイアログに間違ったコンテキストを渡している可能性があります

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

HomeActivityプログレス ダイアログが表示されているときに、 がかがんでいないことを確認しますか?

于 2013-07-12T10:49:09.850 に答える