Home Menu

Menu



Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 09/02/15, 14:15:27
Avatar de DaSound
DaSound DaSound no está en línea
Desarrollador
Mensajes: 8,578
Compra y venta: (1)
 
Fecha de registro: oct 2008
Localización: Madrid
Mensajes: 8,578
Modelo de smartphone: iPhone X 256GB / iPad Pro 10.5 / iPhone 6s Plus /
Versión de ROM: iOS
Tu operador: Movistar
Mencionado: 68 comentarios
Tagged: 0 hilos
ProgressDialog no se ve en tarea asíncrona por culpa del get().

Buenas a todos.

Resulta que tengo una tarea asíncrona que descarga una serie de imágenes de internet desde una lista de urls que yo le paso previamente.

El tema es que funciona perfectamente, pero quiero mostrar un diálogo de progreso para que no se quede la app congelada hasta su carga, el problema es el siguiente:

Si se hace un ".get()" para obtener los datos de la tarea asíncrona, el progressDialog no se ve, porque el método get para el hilo de la UI, con lo que la deja colgada hasta que termina.

La solución parece ser no utilizar el get, pero no consigo implementar una solución que haga el trabajo sin este método. Por lo que he podido leer, se debería utilizar un callback llamado desde el postExecute, pero no sé porqué, no me sale implementarlo... ¿Alguno lo habéis hecho y os ha funcionado?

Gracias de antemano!!
Responder Con Cita


  #2  
Viejo 09/02/15, 20:05:38
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
http://www.sgoliver.net/blog/tareas-...d-y-asynctask

Concretamente te interesa la parte donde habla del publishProgress, que tendrás que llamarlo cada vez que se baje correctamente un fichero.

Supongo que en el doInBackground tendrás un bucle, en cada iteración llamas al publishProgress con el número de ficheros que llevas.

Y en el onProgressUpdate actualizas la barra de progreso.
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 09/02/15, 21:18:00
Avatar de DaSound
DaSound DaSound no está en línea
Desarrollador
Mensajes: 8,578
Compra y venta: (1)
 
Fecha de registro: oct 2008
Localización: Madrid
Mensajes: 8,578
Modelo de smartphone: iPhone X 256GB / iPad Pro 10.5 / iPhone 6s Plus /
Versión de ROM: iOS
Tu operador: Movistar
Mencionado: 68 comentarios
Tagged: 0 hilos
Gracias mocelet!!

No tengo barra de progreso, tengo un diálogo que indica que se está procesando el trabajo, no necesito actualizar el porcentaje. Concretamente, mi tarea asíncrona recibe una lista de strings, que son las urls de las imágenes, y devuelve un List<Bitmap> que, efectivamente, es generado en un bucle en el doInBackground()... mi duda es... como lo hago si tengo que devolver un objeto... si la tarea únicamente realizara un trabajo sin tener que recuperar ningún dato era sencillo, porque no tengo que hacer el get(), con el execute me vale y sí se ve el diálogo, pero con el get no... esa es mi duda, como hago el get dentro de la tarea asíncrona y devulevo el objeto List<Bitmap> si solo ejecuto la sentencia "execute" desde la MainActivity.
Responder Con Cita
  #4  
Viejo 09/02/15, 22:18:32
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Vale, no entendía el problema. El resultado te lo da el onPostExecute cuando lo tenga.

Solo necesitas un callback en tu actividad para que el onPostExecute lo llame.

Por no escribir lo mismo, mira la respuesta aceptada http://stackoverflow.com/questions/1...asynctask-is-a

EDIT: Si tu async task es una clase interna no tienes que andar extendiendo la clase y creando la interfaz, simplemente hacer la llamada desde onPostExecute. Imagino que no es tu caso

Última edición por mocelet Día 09/02/15 a las 22:28:56
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 10/02/15, 21:53:31
Avatar de DaSound
DaSound DaSound no está en línea
Desarrollador
Mensajes: 8,578
Compra y venta: (1)
 
Fecha de registro: oct 2008
Localización: Madrid
Mensajes: 8,578
Modelo de smartphone: iPhone X 256GB / iPad Pro 10.5 / iPhone 6s Plus /
Versión de ROM: iOS
Tu operador: Movistar
Mencionado: 68 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por mocelet Ver Mensaje
Vale, no entendía el problema. El resultado te lo da el onPostExecute cuando lo tenga.

Solo necesitas un callback en tu actividad para que el onPostExecute lo llame.

Por no escribir lo mismo, mira la respuesta aceptada http://stackoverflow.com/questions/1...asynctask-is-a

EDIT: Si tu async task es una clase interna no tienes que andar extendiendo la clase y creando la interfaz, simplemente hacer la llamada desde onPostExecute. Imagino que no es tu caso
Exactamente, ese era el problema... con esa respuesta que me has enviado le he dado solución... muchas gracias por todo compañero!
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 15:44:41 (GMT +2)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007