una tutorial tiempo termine tarea studio runonuithread que manejo hilos esperar ejemplo ejecutar como cierto cada asynctask asincronos java android runtime-error progressdialog looper

java - tutorial - No se puede crear el controlador dentro de la hebra que no ha llamado a Looper.prepare() dentro de AsyncTask para ProgressDialog



runonuithread vs asynctask (4)

No entiendo por qué estoy recibiendo este error. Estoy usando 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(); [...]

Cada vez que pruebo downloadSpinnerProgressDialog.show() recibo el error.

Alguna idea chicos?


El método show() debe doInBackground() desde el subproceso Interfaz de usuario (UI) , mientras que doInBackground() ejecuta en un subproceso diferente, que es la razón principal por la que se diseñó AsyncTask .

onProgressUpdate() 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(); } }


También tuve dificultades para hacer este trabajo, la solución para mí fue usar respuestas tanto de hyui como de 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(); } }); } }


Tuve un problema similar, pero al leer esta pregunta, pensé que podía ejecutar el hilo de UI:

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

Parece hacer el truco para mí.


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();