Android - ¿por qué se ejecuta antes una parte del cógido que otra?

 
Vista:
sin imagen de perfil

¿por qué se ejecuta antes una parte del cógido que otra?

Publicado por Victor (2 intervenciones) el 27/10/2016 11:32:41
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/?87cc582d1b37d676e0840bec301980dbo.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/?dc2fdd4e2f1fb9696d8a786a07eb89bfo.jpg#codigos


Espero que alguien me pueda ayudar porque me saca de quicio este historia :(
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

¿por qué se ejecuta antes una parte del cógido que otra?

Publicado por Victor (2 intervenciones) el 27/10/2016 12:04:58
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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 444
Oro
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

¿por qué se ejecuta antes una parte del cógido que otra?

Publicado por juanki (253 intervenciones) el 27/10/2016 13:17:02
Hola

Si contesta por privado a un mensaje en un foro público no es un forero y está haciendo un flaco favor al foro :(

Muchas gracias a ti por compartir la solución que te dio, así, si alguien tiene la misma duda, le resultará de utilidad el hilo. Que no es ni más ni menos la función de un foro público.

A ti muchas gracias por compartir.
Al supuesto forero pues que entienda lo que es un foro y cómo se usa (puedes darme todos los puntos negativos que quieras).

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar