|
||
|
![]() |
![]() |
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
|
||||
|
||||
¿por qué se ejecuta antes una parte del código?
Hola, tengo que obtener la latitud y la longitud para meterlos en un MapView.
Lo obtengo de una base de datos que está alojada en un servidor por lo que hago una petición a la base de datos. Mi problema es que la primera vez funciona perfecto pero las siguientes me da latitud y longitud 0.0 porque una parte del código se ejecuta antes que otra. Algunas veces puede llegar a funcionar de forma algo aleatoria. Me da la sensación que se debe a que el código sigue ejecutándose aunque aunque no se haya recibido los datos de la base de datos. Pero lo que me extraña es que la primera vez funciona correctamente pero si en android voy a la Activity anterior pulsando el botón "Atrás" típico de Android y vuelvo a lanzar la activity entonces se me ejecuta una parte del código antes que otra. Para saber que se va ejecutando antes he hecho algunos System.out.println(). Os pongo las fotos de lo que sucede. Subo el .java a este link ya que es un poco largo aunque realmente lo que me interesa es la zona de "latitud, longitud, cliente.get, y mapview" del MapVieW. https://we.tl/EEbPwRSbm7 Y aquí os dejo las fotos de los System.out.println() que se van ejecutando. No entiendo porque en ambas ejecuciones no se ejecuta primero la parte de cliente.get .... y además en la primera ejecución obtengo resultados distintos a la segunda. Primera ejecución https://subefotos.com/ver/?87cc582d1...bo.jpg#codigos Segunda ejecución al volver a la activity anterior, hacer un click y volver de nuevo a la activity mostrarinfoanuncio.. https://subefotos.com/ver/?dc2fdd4e2...fo.jpg#codigos Espero que alguien me pueda ayudar porque me saca de quicio este historia ![]() Un saludo a todos! |
|
#2
|
||||
|
||||
problema resuelto gracias al aporte de un forero
Hola, eso que indicas, te esta ocurriendo, porque el objeto AsyncHttpClient, es un cliente que realiza peticiones asíncronas, es decir, que levanta un nuevo thread para realizar la peticion dejando libre el thread principal para que continue su ejecución.
El AsyncHttpClient.get(...) funciona de la siguiente forma, si la petición a tenido éxito, se ejecuta el método onSuccess(...) y si por el contrario, la petición a fallado o algo, se ejecuta el metodo onFailure(...). Con todo esto, creo... que para solucionar tu problema, la carga del mapa, debes hacerla dentro del cuerpo del método onSuccess(...){ ... }, ya que es cuando la petición tiene éxito, es cuando se deben cargar los datos en el mapa. Tal y como lo estas haciendo, lo que te esta ocurriendo, es que estas intentando cargar los datos en el mapa antes de que la petición del cliente AsyncHttpClient se haya procesado. Bueno, prueba eso, a cargar el mapa en las ultimas lineas del método onSuccess en lugar de ponerlo directamente en el onCreate como lo estas haciendo y ya nos cuentas. Un saludo |
![]() |
![]() |
||||||
|