Spanish Leer y guardar datos

emvpic

Member
Licensed User
Hola, estoy tratando de saber como leer y guardar datos. Quiero mostrar en 24 labels, 24 valores que guardo en un archivo. El programa consta de 1 botón para escribir 24 valores en un archivo, 1 boton para mostrar el valor de cada label.
Cuando guardo el archivo, cierro el programa, lo vuelvo a abrir, presiono el botón de actualizar los labels mostrando cada uno su valor correspondiente me sale en cada label "null".
Para que me muestren los labels su valor me toca presionar primero el botón de guardar los valores en el archivo.
Si el archivo ya esta guardado con los valores en la anterior ejecución del programa, ¿Por que me muestra "null" en cada label, en la posterior ejecución del programa?
B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
Dim Mapa As Map
    Private Button1 As Button
    Private Button2 As Button
    Private Label1 As Label
    Private Label2 As Label
    Private Label3 As Label
    Private Label4 As Label
    Private Label10 As Label
    Private Label11 As Label
    Private Label12 As Label
    Private Label13 As Label
    Private Label14 As Label
    Private Label15 As Label
    Private Label16 As Label
    Private Label17 As Label
    Private Label18 As Label
    Private Label19 As Label
    Private Label20 As Label
    Private Label21 As Label
    Private Label22 As Label
    Private Label23 As Label
    Private Label24 As Label
    Private Label5 As Label
    Private Label6 As Label
    Private Label7 As Label
    Private Label8 As Label
    Private Label9 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    '[542,536,530,524,518,512,506,500,494,488,482,476,470,464,458,452,446,440,434,428,422,416,410,404]
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("Layout1")

Mapa.Initialize

File.WriteMap(File.DirInternal,"ejemplo.dat",Mapa) 'Escribimos el mapa en el archivo ejemplo.dat
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub



Sub Button1_Click
   
Mapa.Initialize
Mapa = File.ReadMap(File.DirInternal,"ejemplo.dat") 'Leemos el archivo y lo cargamos en el mapa.
Mapa.Put("1","542") 
Mapa.Put("2","536")
Mapa.Put("3","530")
Mapa.Put("4","524")
Mapa.Put("5","518") 
Mapa.Put("6","512")
Mapa.Put("7","506")
Mapa.Put("8","500")
Mapa.Put("9","494") 
Mapa.Put("10","488")
Mapa.Put("11","482")
Mapa.Put("12","476")
Mapa.Put("13","470") 
Mapa.Put("14","464")
Mapa.Put("15","458")
Mapa.Put("16","452")
Mapa.Put("17","446") 
Mapa.Put("18","440")
Mapa.Put("19","434")
Mapa.Put("20","428")
Mapa.Put("21","422") 
Mapa.Put("22","416")
Mapa.Put("23","410")
Mapa.Put("24","404")
File.WriteMap(File.DirInternal,"ejemplo.dat",Mapa) 'Volvemos a escribir el mapa modificado en el archivo.
End Sub

Sub Button2_Click 'actualizar labels
    Mapa.Initialize
Mapa = File.ReadMap(File.DirInternal,"ejemplo.dat") 'Leemos el archivo y lo cargamos en el mapa.

        Label1.Text=Mapa.Get("1")
    Label2.Text=Mapa.Get("2")
    Label3.Text=Mapa.Get("3")
    Label4.Text=Mapa.Get("4")
    Label5.Text=Mapa.Get("5")
    Label6.Text=Mapa.Get("6")
    Label7.Text=Mapa.Get("7")
    Label8.Text=Mapa.Get("8")
    Label9.Text=Mapa.Get("9")
    Label10.Text=Mapa.Get("10")
    Label11.Text=Mapa.Get("11")
    Label12.Text=Mapa.Get("12")
    Label13.Text=Mapa.Get("13")
    Label14.Text=Mapa.Get("14")
    Label15.Text=Mapa.Get("15")
    Label16.Text=Mapa.Get("16")
    Label17.Text=Mapa.Get("17")
    Label18.Text=Mapa.Get("18")
    Label19.Text=Mapa.Get("19")
    Label20.Text=Mapa.Get("20")
    Label21.Text=Mapa.Get("21")
    Label22.Text=Mapa.Get("22")
    Label23.Text=Mapa.Get("23")
    Label24.Text=Mapa.Get("24")

   
    File.WriteMap(File.DirInternal,"ejemplo.dat",Mapa) 'Volvemos a escribir el mapa modificado en el archivo.
   
End Sub

Esta es la forma mas simple de escribir/leer archivos y quiero aprender a hacerlo bien.
He buscado información sobre sql, pero se me hace mas complicado y prefiero hacerlo como lo estoy haciendo.
 

bgsoft

Well-Known Member
Licensed User
Hola

Cuando guardo el archivo, cierro el programa, lo vuelvo a abrir, presiono el botón de actualizar los labels mostrando cada uno su valor correspondiente me sale en cada label "null".

Si te das cuenta, en el Sub Activity_Create, has puesto un:
B4X:
File.WriteMap(File.DirInternal,"ejemplo.dat",Mapa) 'Escribimos el mapa en el archivo ejemplo.dat

Con esto lo que haces es que cuando entras el mapa está vacio, por que entre otras cosas lo has declarado en Sub Globals, y ademas lo has inicializado (Mapa.Initialize) . Cambialo a Sub Process_Globals. Y por ese motivo lo tienes que actualizar, por que al entrar con eso que haces el mapa está vacio.
Si giras la pantalla seguiras teniendo el mismo problema que si entras, por que lo que pongas en mapa habrá desaparecido, eso sin contar que grabas con el mapa vacio.

La secuencia "logica" seria:

En Sub Activity_Create:
- Lees el fichero
- Pintas los labels

Y si al salir quieres guardar los datos, pones guardar datos en:
B4X:
Sub Activity_Pause (UserClosed As Boolean)
  If UserClosed Then GuardarDatos

de esta forma será automatico.

Saludos
 
Last edited:

emvpic

Member
Licensed User
Hola
Gracias por ayudarme, estoy haciendo los cambios pero no se porque cuando inicio el programa, me da error diciendome que se ha detenido.
Voy a seguir haciendo pruebas, también estoy mirando como hacer bases de datos sql, tengo algo medio funcionando.
 

bgsoft

Well-Known Member
Licensed User
Hola

Si solucionaste el problema, podrias añadir a título [SOLUCIONADO] , asi mejoramos el foro

Gracias

Saludos
 

emvpic

Member
Licensed User
Hola
No conseguí solucionar el problema. Lo volveré a revisar para encontrar el fallo.
Estoy aprendiendo a usar bases de datos sql y ya tengo algo funcionando bien.
Tengo la idea de abrir un tema sobre un ejemplo sencillo de uso de bases de datos, y espero que a muchos les pueda ayudar como a mi me ha ayudado.

Un saludo.
 

bgsoft

Well-Known Member
Licensed User
Hola

Una de las mejores formas de encontrar fallos es ejecutar el programa en modo debug, tambien poniendo LOGs en los sitios donde creas que debe entrar y darte ciertos valores

Saludos
 
Top