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:
- Java.lang.RuntimeException: No se pudo abrir el par de canales de entrada
- No pudo acceder al gestor de paquetes. Se ejecuta el sistema mientras se instala la aplicación android
- La llamada requiere permisos que pueden ser rechazados por el usuario.
- Android - No se pudo encontrar google-play-services_lib.apk! error
- Se produjo un error después de actualizar la herramienta Android SDK REV 22 "No se pudo resolver la superclase de L"
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?
- Ksoap2 no puede serializar la excepción en Android 2.2 (utilizando objetos definidos por el usuario)
- Android IntentService Error de instancia
- Solicitar permiso de lectura de mi propio ContentProvider en otra aplicación
- W / CameraBase: Se ha producido un error al conectar la cámara: 0
- Java.lang.IllegalAccessError ref de clase en la clase preverified resuelto a la implementación inesperada
- Android: variable tiene un valor incorrecto en while loop
- Error de facturación en la aplicación de Android InvalidKeySpecException
- Android: runtime-error 'No se puede crear el directorio', en el uso de la clase DownloadManager, method setDestinationInExternalPublicDir
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();