Spanish (SOLUCIONADO) Duda Google Maps

TheFalcon

Active Member
Licensed User
Longtime User
Buenas, tengo una duda a ver si alguien puede ayudarme. He actualizado una Aplicación que usaba google maps, y ahora tengo un problema .
El mapa funciona perfectamente, pero en mi aplicación puedo :

1º Poner un icono de un coche en mi ubicación actual y guardar en una base de dato dicha ubicación.
2º Ir guardando ubicaciones conforme yo quiera, y añadirle un titulo para luego recuperarla de una SQL.

para estas 2 cosas uso 2 botones que voy a pegar a continuación. siempre funciono pero ahora no, SI guardo coche y luego muestro ubicaciones funciona. Si muestro ubicaciones a secas, sin guardar coche me da error, pego a continuación.

Si uso primero este botón, luego al usar el de Ubicaciones , no da error
B4X:
If latitud = "0" And Longitud = "0" Then
       
    MsgboxAsync("No se puede comprobar la Ubicación ahora mismo, espere a que se sincronicen los Satélites (Icono de Satélite en Verde)","Atención")
       
       
    Else
           
           
                '*********** guardamos la ubicación actual y mostramos el coche ***************
   
    'con esto actualizamos el campo que contiene la id=1   de la tabla coche con la longitud y latitud en las que nos encontramos
sql1.ExecNonQuery("UPDATE coche set latitud ='"& latitud &"', longitud = '" & Longitud & "' WHERE id = 1")
   
   
        'Con esto leemos la tabla y añadimos el dibujo del coche
Dim cursor1 As Cursor
Dim value As String = "1"

'saco los datos donde id = 1
cursor1 = sql1.ExecQuery("SELECT latitud,longitud FROM coche WHERE id='" & value & "'")
For i = 0 To cursor1.RowCount - 1
            cursor1.Position = i
        Next

   
    Marcadores_4x4.Initialize
       
        For Each marcador As Marker In Marcadores_4x4
            marcador.remove
        Next
       
       
        'Aquí añadiría la ubicación nueva.
        Dim m1 As Marker = gmap.AddMarker3(cursor1.GetString("latitud"),cursor1.GetString("longitud"),"COCHE",LoadBitmap(File.DirAssets, "4X4.png"))
        Marcadores_4x4.Add(m1)

       

           
    End If

BOTON UBICACIONES , si lo pulso antes que el botón del coche me da el siguiente error. (con este mostraría todas las ubicaciones (coche y marcadores)

Código del Boton:

Mostrar Ubicaciones:
If File.Exists(File.DirDefaultExternal,"cetreros.sql") = False Then
        File.Copy(File.DirAssets,"cetreros.sql",File.DirDefaultExternal,"cetreros.sql")
    End If
   
    If Starter.sql.IsInitialized = False Then
        Starter.sql.Initialize(File.DirDefaultExternal, "cetreros.sql", False)
    End If
   
   
   
   
    Dim Unmarcador () As String
    lstMarcadores.Initialize

   

    lstMarcadores = DBUtils.ExecuteMemoryTable(Starter.sql, "SELECT * FROM coordenadas", Null,0) ' Asi coje todas las columnas de coordenadas y mete la 1º en (0) , la 2º en (1) , etc.

       
        For intMarcador = 0 To lstMarcadores.Size -1'Recorre cada elemento de la Lista
       
        Unmarcador = lstMarcadores.Get(intMarcador) 'Extrae un marcador de la Lista
       
   
        Dim m1 As Marker = gmap.AddMarker2(Unmarcador(0), Unmarcador(1), Unmarcador(2), gmap.HUE_ORANGE)
       
        m1.Snippet = Unmarcador(3) ' con esto añado texto bajo el nombre de la chincheta, que lo guardo en la variable (3)
       
   
    Next

   
   

    Dim cursor1 As Cursor
    Dim value As String = "1"

    cursor1 = sql1.ExecQuery("SELECT latitud,longitud FROM coche WHERE id='" & value & "'")
    For i = 0 To cursor1.RowCount - 1
        cursor1.Position = i
    Next
   
   
    Dim m1 As Marker = gmap.AddMarker3(cursor1.GetString("latitud"),cursor1.GetString("longitud"),"COCHE",LoadBitmap(File.DirAssets, "4X4.png"))
    Marcadores_4x4.Add(m1)


ERROR

B4X:
googlemaps_bt_mostrarcoordenadas_click (java line: 737)
java.lang.RuntimeException: Object should first be initialized (List).
    at anywheresoftware.b4a.AbsObjectWrapper.getObject(AbsObjectWrapper.java:67)
    at anywheresoftware.b4a.objects.collections.List.Add(List.java:83)
    at com.Fjo.DiarioCetrero.googlemaps._bt_mostrarcoordenadas_click(googlemaps.java:737)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
    at anywheresoftware.b4a.BA$1.run(BA.java:352)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:226)
    at android.app.ActivityThread.main(ActivityThread.java:7592)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
 

EnriqueGonzalez

Well-Known Member
Licensed User
Longtime User
lstMarcadores
lstMarcadores.Initialize
No sirve inicializarlo si despues vas a llamar otro objeto sobre el
lstMarcadores = DBUtils.ExecuteMemoryTable(Starter.sql, "SELECT * FROM coordenadas", Null,0) ' Asi coje todas las columnas de coordenadas y mete la 1º en (0) , la 2º en (1) , etc.
Despues de esta liena, revisa si lstMarcadores esta inicializado. El problema seguramente es que lstMarcadores es una variable global, es probable que esta linea te regrese una lista no inicialziada.
 

TheFalcon

Active Member
Licensed User
Longtime User
Gracias por tu respuesta, antes lo tenia como me comentas

B4X:
    Dim Unmarcador () As String
    Dim lstMarcadores As List

    lstMarcadores = DBUtils.ExecuteMemoryTable(Starter.sql, "SELECT * FROM coordenadas", Null,0)

y no lo inicializaba, pero probé a Inicializarlo y definir la variable globalmente. Aunque puesto como te lo pongo ahora , tambien me da ese error,
 

josejad

Expert
Licensed User
Longtime User
Hola:

A lo que creo que se refiere Enrique, es que probablemente ExecuteMemoryTable devuelva una lista sin inicializar si no obtiene resultados, por lo que deberías comprobar si está inicializada antes de hacer el For intMarcador = 0 To lstMarcadores.Size -1

Algo como:

B4X:
IF lstMarcadores.isInitialized Then
For intMarcador = 0 To lstMarcadores.Size -1

Por cierto, prueba el código en modo debug en vez de en modo release para ver la línea exacta que te da el error.

saludos
 
Last edited:

TheFalcon

Active Member
Licensed User
Longtime User
Arreglado, con el modo debug, me hacia TODO bien, daba el error al terminar el código, así que mire y el ultimo código era el de mostrar el coche.

vi que en el botón de guardar el coche inicializaba la lista, pero en el de mostrar TODO, no, así que le añadí el inicializar, quedando así

B4X:
    Marcadores_4x4.Initialize
    
    Dim m1 As Marker = gmap.AddMarker3(cursor1.GetString("latitud"),cursor1.GetString("longitud"),"COCHE",LoadBitmap(File.DirAssets, "4X4.png"))
    Marcadores_4x4.Add(m1)

lo que me da coraje, mala leche o me pone del os nervios, es que funcionaba sin problemas, pero al actualizar los Android, las políticas o las librerías, eso ya no funcionaba, y me vuelvo majara buscando el por que.
Voy a tener que ir actualizando aplicaciones semanalmente 🤣 .
Gracias a los 2
 
Top