0

こんにちは、アプリケーションに力を入れています。

エラー - ビューがウィンドウ マネージャに接続されていません。

//asynctask for groupnames
    class GroupDataLoad extends AsyncTask<Void, Void, Void>{

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();

            mCustomProgressDialog = CustomProgressDialog.createDialog(
                    UserMenuActivity.this, "", "");

            mCustomProgressDialog.show();   
            mCustomProgressDialog.setCancelable(false); 
        }

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub

            dbHelper = new DatabaseHelper(UserMenuActivity.this);
            //getting the group list
            mXMPPConn.getContactList();

            ParseValues.parsedGroupList.clear();
            APIVariables apiVariables = new APIVariables();
            ParseValues.getGroupList(apiVariables.getGroupList("abc.com"));

            int size = ParseValues.parsedGroupList.size();
            for(int i=0;i<size;i++){
                String groupName = ParseValues.parsedGroupList.get(i).getGroup_name();
                if(CGMStaticVariable.CommonConnection.isConnected())
                {
                    createRoom(groupName, CGMStaticVariable.CommonConnection);
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            setExpandableListView();
            mCustomProgressDialog.dismiss();    
        }
    }

ロードが開始されたら、ステータスバーからの通知をクリックしてフォアグラウンドページを変更し、[戻る]ボタンをクリックして同じアクティビティに戻ると、「ビューがウィンドウマネージャーに接続されていません」と言ってクラッシュします

問題が実際に何であるかを把握できません

ありがとう

4

1 に答える 1

0

当時は別のことをしたと思いますが、今すぐ修正する必要がある場合は、非同期タスクの開始時にアクティビティに進行状況ダイアログを作成します。アクティビティ内のダイアログへの参照を保持し、タスクが終了した後でそれを閉じます。タスクが終了したことをアクティビティに通知するには、次のようにします。

  1. インターフェイスを作成する
  2. アクティビティにインターフェースを実装させる
  3. 非同期タスクがインターフェースを実装するオブジェクトへの1週間の参照を受信して​​保持するようにします
  4. アクティビティ(「これ」)をタスクに渡します
  5. onPostExecute()で、渡されたオブジェクトのインターフェイスメソッドを呼び出します
  6. そのメソッドの実装では、ダイアログを破棄/閉じます

さらに、タスクが終了する前にアクティビティが破棄されると、ダイアログも破棄されます。弱参照を使用することが重要です。これにより、潜在的に長いタスクが終了するまでアクティビティが参照されません。

于 2013-03-04T10:45:54.143 に答える