No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () dentro de AsyncTask para ProgressDialog

No entiendo por qué estoy recibiendo este error. Estoy utilizando AsyncTask para ejecutar algunos procesos en segundo plano.

Yo tengo:

protected void onPreExecute() { connectionProgressDialog = new ProgressDialog(SetPreference.this); connectionProgressDialog.setCancelable(true); connectionProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); connectionProgressDialog.setMessage("Connecting to site..."); connectionProgressDialog.show(); downloadSpinnerProgressDialog = new ProgressDialog(SetPreference.this); downloadSpinnerProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); downloadSpinnerProgressDialog.setMessage("Downloading wallpaper..."); } 

Cuando doInBackground() en doInBackground() dependiendo de una condición I:

 [...] connectionProgressDialog.dismiss(); downloadSpinnerProgressDialog.show(); [...] 

Siempre que intento downloadSpinnerProgressDialog.show() recibo el error.

¿Ideas chicos?

El método show() debe ser llamado desde el subproceso User-Interface (UI) , mientras que doInBackground() ejecuta en hilos diferentes, que es la principal razón por la que AsyncTask fue diseñado.

Tienes que llamar a show() en onProgressUpdate() o en onPostExecute() .

Por ejemplo:

 class ExampleTask extends AsyncTask<String, String, String> { // Your onPreExecute method. @Override protected String doInBackground(String... params) { // Your code. if (condition_is_true) { this.publishProgress("Show the dialog"); } return "Result"; } @Override protected void onProgressUpdate(String... values) { super.onProgressUpdate(values); connectionProgressDialog.dismiss(); downloadSpinnerProgressDialog.show(); } } 

Tuve un problema similar, pero a partir de la lectura de esta pregunta me di cuenta de que podría ejecutar en el hilo de interfaz de usuario:

 YourActivity.this.runOnUiThread(new Runnable() { public void run() { alertDialog.show(); } }); 

Parece hacer el truco para mí.

Tuve dificultades para hacer este trabajo también, la solución para mí era usar ambas respuestas hyui y konstantin,

 class ExampleTask extends AsyncTask<String, String, String> { // Your onPreExecute method. @Override protected String doInBackground(String... params) { // Your code. if (condition_is_true) { this.publishProgress("Show the dialog"); } return "Result"; } @Override protected void onProgressUpdate(String... values) { super.onProgressUpdate(values); YourActivity.this.runOnUiThread(new Runnable() { public void run() { alertDialog.show(); } }); } } 
 final Handler handler = new Handler() { @Override public void handleMessage(final Message msgs) { //write your code hear which give error } } new Thread(new Runnable() { @Override public void run() { handler.sendEmptyMessage(1); //this will call handleMessage function and hendal all error } }).start(); 
  • La actividad no llamó a terminar? (API 23)
  • Android Keystore Error "no pudo generar clave en keystore"
  • Android - Crash al generar un número aleatorio
  • Inicie una nueva actividad fuera del contexto de la actividad.
  • Señal fatal 7 (SIGBUS) en 0x00000000 (código = 2)
  • No se muestra nada después de abrir la aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.