Spanish Como funciona File.ReadList?

IdasI4A

Active Member
Licensed User
Longtime User
Creo una lista variables de un tipo propio, la grabo con File.WriteList y luego cuado la recupero con File.ReadList me da un error cuando accedo a un elemento de la lista.

¿Que hago mal?

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 DatosInternet As List
   Type DatoInternet(D As Int, ID As String, Indice As Int, Texto As String)
   
   Dim B, BL As Button
   
End Sub

Sub Activity_Create(FirstTime As Boolean)
   'Do not forget to load the layout file created with the visual designer. For example:
   'Activity.LoadLayout("Layout1")

   
   b.Initialize("B")
   b.Text="Write"
   Activity.AddView(b,10,10,100,40)
   
   BL.Initialize("Bl")
   BL.Text="read"
   Activity.AddView(BL,120,10,100,40)

End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub B_Click
   Dim l As Int
   Dim miLista As List
   
   miLista.Initialize
   
   For l=1 To 10
      Dim Dato As DatoInternet
      Dato.Initialize
      Dato.D=l
      Dato.ID=NumberFormat(l,3,0)
      Dato.Indice=l*10
      Dato.Texto="Hola"
      miLista.Add( Dato)
   Next
   
   File.WriteList(File.DirRootExternal,"Lista",miLista)
End Sub

Sub BL_Click
   Dim l As Int
   Dim miLista As List
   
   miLista=File.ReadList(File.DirRootExternal,"Lista")

   For l=1 To miLista.Size-1
      Dim Dato As DatoInternet      
      Dato=miLista.Get(l) ' da error  
      Log(Dato.d)
   Next
End Sub
 

IdasI4A

Active Member
Licensed User
Longtime User
Solucionado

Ya lo he solucionado, he usado de la libreria RandomAccessFile las funciones WriteObject y ReadObject.
Por si a alguien le interesa aquí le dejo el código:
B4X:
Sub B_Click
   Dim l As Int
   Dim miLista As List
   Dim S As String
   
   miLista.Initialize
   
   For l=1 To 10
      Dim Dato As DatoInternet
      Dato.Initialize
      Dato.D=l
      Dato.ID=NumberFormat(l,3,0)
      Dato.Indice=l*10
      Dato.Texto="Hola, Adios"
      miLista.Add( Dato)
   Next
   
   Dim Ra As RandomAccessFile
   
   If File.Exists(File.DirRootExternal,"miLIsta") Then
      File.Delete(File.DirRootExternal,"miLIsta")
   End If
   
   Ra.Initialize(File.DirRootExternal,"miLIsta",False)
   For l=0 To miLista.Size-1
      Ra.WriteObject(miLista.Get(l),True,Ra.CurrentPosition)
   Next
   Ra.Close
End Sub

Sub BL_Click
   Dim l As Int
   Dim miLista As List
   Dim Dato As DatoInternet
   Dim Ra As RandomAccessFile
   
   miLista.Initialize
   If File.Exists(File.DirRootExternal,"miLIsta") Then
      Ra.Initialize(File.DirRootExternal,"miLIsta",True)
      Do While Ra.CurrentPosition<Ra.Size
         Dato=Ra.ReadObject(Ra.CurrentPosition)
         miLista.Add(Dato)
      Loop
      Ra.Close
      
      For l=0 To miLista.Size-1
         Dato=miLista.Get(l)
         Log("d=" & Dato.D)
         Log("Id=" & Dato.ID)
         Log("Indice=" & Dato.Indice)
         Log("texto=" & Dato.Texto)
      Next
   End If
   
End Sub
 

desof

Well-Known Member
Licensed User
Longtime User
HOLA,

DatoInternet que tipo de datos es porque me aparece en rojo!!!
 

IdasI4A

Active Member
Licensed User
Longtime User
DatoInternet es un tipo de dato propio, definido por el usuario.
Esta definido en ele primer mensaje, pero puede ser cualquier dato propio, en este caso dos números y dos cadenas

B4X:
Type DatoInternet(D As Int, ID As String, Indice As Int, Texto As String)
 

desof

Well-Known Member
Licensed User
Longtime User
DatoInternet es un tipo de dato propio, definido por el usuario.
Esta definido en ele primer mensaje, pero puede ser cualquier dato propio, en este caso dos números y dos cadenas

B4X:
Type DatoInternet(D As Int, ID As String, Indice As Int, Texto As String)

A perfecto no sabia que se podia definir tipos personalizados ayer me habia dado cuenta despues analizando el code un poco mas tranquilo.

Gracias amigo!!
 
Top