Android: “BadTokenException: kann Nicht hinzufügen-Fenster; ist Ihre Tätigkeit ausführen?

Ich bin die Eröffnung eines progressdialog mit AsyncTask in doInBackground-Methode die Frage, ist das laden aus der Datenbank und nach der Frage erfolgreich geladen der Fortschritt Dialogfeld wird geschlossen

aber mein problem ist, dass einige Zeit ich bekomme folgenden Fehler

      android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRoot$W@44757528 is not valid; is your activity running?

indem Sie einige googeln habe ich gefunden, dass es möglicherweise ich halte einen Verweis auf einen Kontext (entweder explizit, oder indem Sie einen Dialog oder ein Toast oder eine andere abhängige Element), das zerstört wurde (in der Regel, weil Sie die onCreateDialog oder Sie übergeben die Aktivität zu einigen anderen Verfahren, die nicht zerstört erhalten, wenn die Aktivität zerstört wurde).

So, ich habe folgenden code, der entlassen progressdialog in-Fall, wenn die Aktivität zerstört wird, bevor das Dialogfeld geschlossen wird

    protected void onDestroy() {
      if (pdForNewQuestion != null)
            pdForNewQuestion.dismiss();
      super.onDestroy();

    }

aber ich immer noch vor der Frage. Ich bin nicht die Zerstörung jeglicher Aktivität, aber immer noch der Fehler plötzlich kommt manchmal und manchmal klappt es richtig

den asynchronen code unten

      //Start new question in every 60 seconds  :)
    new Thread(new Runnable() {
        public void run() {
            while (true) {

                    try {
                        Thread.sleep(1000);
                        mProgressStatus++;

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    runOnUiThread(new Runnable() {
                        public void run() {
                            mProgress.setProgress(mProgressStatus);
                            txtCountingNum.setText((timer--) + "\nSec.");
                            if (timer < 0) {
                                questionLoadWithAsyncTask();
                            }
                        }
                    });

            }

        }
    }).start();




       public void questionLoadWithAsyncTask() {

    new AsyncTask<Void, Void, Void>() {
        @Override
        protected void onPreExecute() {
            pdForNewQuestion = new ProgressDialog(QuizActivity.this);
            pdForNewQuestion.setTitle("Please wait...");
            pdForNewQuestion.setMessage("Question is loading...");
            pdForNewQuestion.setCancelable(false);
            pdForNewQuestion.setIndeterminate(true);
            pdForNewQuestion.show();
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            wordsCursor = dbHelper.getRandomWords();
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            if (pdForNewQuestion != null) {
                pdForNewQuestion.dismiss();
            }
        }

    }.execute();

}
  • Veröffentlichen Sie Ihren code für asynchrone Aufgabe, ich vermute, Sie haben nicht entlassen Ihr Fortschritts-dialog.
  • Bitte posten Sie Ihre asynctask code
  • Bekommst du Fehler beim drehen mobile oder in der Regel immer Fehler?
  • Nein, nicht an der Zeit Drehen, aber Fehler entstehen automatisch während der Ausführung meiner Tätigkeit, es kann einige Zeit oder zu unterschiedlichen Zeiten 🙁
InformationsquelleAutor | 2013-10-17
Schreibe einen Kommentar