Spanish [SOLUCIONADO] CIERRE DE LA APP

Anton Solans Argemí

Active Member
Licensed User
Estoy realizando una importación de un fichero donde voy leyendo cada una de las líneas, leyendo los datos y guardándolos en un fichero (Base de Datos SqlLite).
Actualmente esta APP está funcionando en varios móviles y de distintas marcas y nunca ha habido ningún problema.
Hice una instalación nueva en un móbil OPPO y me encuentro que al hacer la importación de repente se me sale de la APP sin dar ningún error ni nada y con el DEBUG tampoco me da ningún error.
Hice otra instalación en otro OPPO para ver si era el modelo del móvil ya que era la primera vez que hacíamos la instalación en un OPPO y me funciona perfectamente.
Ya no se si el usuario puede haber manipulado algo del móvil que lo ha hecho dejar de funcionar o el problema es de la APP pero si fuera de la APP no funcionaría en ningún móvil y en el resto está funcionando.

Alguien podría darme solución o alguna pista de que puede estar sucediendo?
 

julio lutjens

Member
Licensed User
Longtime User
tuve un tema parecido y era la version de android en el telefono que tenia el problema, se actualizo y nunca mas sucedio.
 

Anton Solans Argemí

Active Member
Licensed User
He retomado este tema y creo que el problema es de memoria , a media importación se queda sin memoria libre.

Estoy poniendo:

Dim Reflector1 As Reflector
Reflector1.RunStaticMethod("java.lang.System", "gc", Null, Null)

pero no se me acaba de solucionar el problema.

No se si esta sería la instrucción correcta o que debería hacer para liberar el espacio y la importación de todos los registros finalizara correctamente.
 

angel_

Well-Known Member
Licensed User
Longtime User
Prueba añadiendo esto en el manifiesto:

B4X:
SetApplicationAttribute(android:largeHeap, "true")
 

josejad

Expert
Licensed User
Longtime User
Hola Anton:

Un ejemplo para probar vendría muy bien para que fuese más fácil ayudarte.

saludos,
 

Anton Solans Argemí

Active Member
Licensed User
Te pongo un ejemplo muy sencillo:

For i=60000 To 62000
Log (i)
sql1.ExecNonQuery("insert into tcliente (codigo) values (" & i & ")" )
Next

1685722758290.png


Sólo me inserta 1020 registros y sale de la APP sin poner ningún error ni nada
 

josejad

Expert
Licensed User
Longtime User
Hola:

Hace mucho que no trabajo con sqlite así que no tengo ningún ejemplo ahora a mano (por eso es más sencillo para todos si tú subes uno), pero para hacer muchos inserts debes hacerlo con ExecNonQueryBatch.
Añades todas las sentencias a un batch, y lo ejecutas, y ya internamente se encarga de todo.

Busca en el foro por ExecNonQueryBatch, pero debería ser algo así (no lo he probado)

B4X:
For i = 60000 To 62000
  Log (i)
  sql1.AddNonQueryToBatch(("insert into tcliente (codigo) values (" & i & ")" ) 'Añades todos los inserts a un batch
  Next
Dim SenderFilter as Object = sql1.ExecNonQueryBatch("SQL") 'Lo hacemos así para hacerlo de forma asíncrona con un WaitFor
Wait For (SenderFilter) SQL_NonQueryComplete (Success as Boolean)
if Success Then
  log("Insertado con éxito")
else
  log("Ocurrió algún problema")
End if
 

Anton Solans Argemí

Active Member
Licensed User
Lo del ExecNonQueryBatch me ha funcionado :) (muchísimas gracias!) pero ahora tengo otro problema que creo está vinculado con este cambio pero no estoy seguro y no sé como resolverlo:

El proceso que hago es el siguiente:

Bajo un fichero desde un FTP y llamo a ‘importacion

Me hace el todo el proceso de importación de datos correctamente, hace el carga_rutas_en_listview y a continuación me cierra la APP.

B4X:
Sub importacion
Import_datos
Carga_Rutas_en_ListView
End Sub

B4X:
Sub Import_datos
Leo el fichero que he bajado del FTP y voy realizando los sql1.AddNonQueryToBatch de todos los registros a las tablas correspondientes (clientes,artículos,rutas...)
grabar_datos
End Sub

B4X:
Sub grabar_datos As ResumableSub
Dim SenderFilter As Object = sql1.ExecNonQueryBatch("SQL") 'Lo hacemos así para hacerlo de forma asíncrona con un WaitFor
Wait For (SenderFilter) SQL_NonQueryComplete (Success As Boolean)
If Success Then
    ProgressDialogHide
    ToastMessageShow("Importación finalizada correctamente.",False)
    Log("Insertado con éxito")
Else
   ProgressDialogHide
   ToastMessageShow("Importación finalizada con errores.",False)
   Log("Ocurrió algún problema")
End If
End Sub

B4X:
Sub Carga_Rutas_en_ListView
ListView1.Clear
registro=sql1.ExecQuery("SELECT * FROM trutas order by fecha,ruta")
If registro.RowCount>0 Then
    For ni=0 To registro.Rowcount - 1
        registro.Position=ni
        fecha= registro.GetString("fecha")
        ruta= registro.GetString("ruta")
        ffecha=" " & fecha.SubString2(0,2) & "/" & fecha.SubString2(2,4) & "/" & fecha.SubString2(4,6)
        ListView1.AddSingleLine2(ffecha & " " & registro.GetString("descripcion"),fecha & ";" & ruta)
        ListView1.SingleLineLayout.ItemHeight=100
        ListView1.SingleLineLayout.Label.TextSize=20
        ListView1.SingleLineLayout.Label.Textcolor=Colors.White
        ListView1.SingleLineLayout.Label.Color=Colors.RGB(55,55,55)
    Next
End If
registro.Close
ListView1.RequestFocus
End Sub
 

Situ LLC

Active Member
Licensed User
Hola Anton Saludes

Espero que estop te ayude.

Yo manejo volumenes grandes de informacion asi como emigro bases de datos de Mysql a Sqlite y las bajo sin problemas.

Mira hay algunas soluciones aqui en el foro el Señor @EnriqueGonzalez entre otros tienen y me vendido algun desarrollos que he implementado donde manejo cantidades de registrros en tablas enormes de mas de 5300 registros y lo subo en segundos. Asi como bajo .apk de 18 megas para actulizaciones en tiempos aceptables si que la aplicacion se salga o se culegue.


Si deseas mi colaborador podrian ayudarte a mejorar el transferencia por medio de micro servicios hechos a la medida de tus necesidades en PHP.

No te dire que es gratuito pues algunas cosas que muchos desarrollan aqui son de gran esfuerzo , tiempo sacrificio y le has costado y debemos apoyar el pago del desarrollo para enriquecer la plataforma , suena raro pero asi es esto.



Yo llege a este punto pues utilzo perifericos que con 4G es ahi donde probamos los tiempos y velocidades en tiempo real que es el campo , en laboratorio todo corre de maravillas.

La foto muestra un sistema de venta de boletos con 4G en Sqlite_cipher y va muy bien con los micro servicios.

Suerte
 

Attachments

  • foto.png
    foto.png
    57.3 KB · Views: 68

josejad

Expert
Licensed User
Longtime User
Hola Antón:

Para un nuevo problema, deberías abrir un nuevo hilo.
Como no me canso de repetir, nos haces la vida mucho más fácil a todos para ayudarte subiendo un pequeño ejemplo que reproduzca el error, así nos evitas tener que crear proyecto, imaginar cómo lo has hecho tú, etc...

En este hilo tienes algunos FTP gratuitos que podrías usar para subir datos de prueba y poder adjuntar aquí un pequeño ejemplo a ver qué está pasando. Esto hará que más gente pueda probarlo y darte ideas.

hace el carga_rutas_en_listview y a continuación me cierra la APP
Si lo haces conectado al IDE, cuando se cierra la app debe darte en el log qué problema está ocurriendo, pégalo aquí (como texto).

Como consejo, te diría que en vez de usar un ListView uses un xCustomListView, es igual de sencillo de usar y tiene algunas ventajas.

saludos,
 

josejad

Expert
Licensed User
Longtime User
Hola Antón:

Ese error indica que el evento (ftp_deletecompleted o sql_nonquerycomplete) se lanzan mientras la app está en background. Trabaja todo lo relativo al FTP en un servicio en vez de una actividad, o pásate a B4XPages

Lo siento, sin un proyecto ya es jugar a adivinar hasta dar con la tecla.
 
Last edited:

Anton Solans Argemí

Active Member
Licensed User
Al hacer lo del ExecNonQueryBatch hice unos cambios en el código que es lo que me provocaba la última incidencia que reporté.

En conclusión, haciendo:

- Los Inserts y los Updates masivos con el ExecNonQueryBatch
- Y también las conexiones FTP de subida y bajado de ficheros con un wait for ....

Se me han solucionado todos los problemas que tenía y ahora va mucho más rápido.

Muchísimas gracias a TODOS por vuestra colaboración y ayuda !!!!
 
Top