Italian RISOLTO: Salvare su file una serie di dati (map e list)

Paperinik

Member
Licensed User
Longtime User
Ragazzi, ho bisogno di un aiutino per riuscire a salvare su file una serie di dati in modo da poterli poi riaprire alla successiva esecuzione.

Esempio di dati da salvare:
1:    valore1        valore2        valore4        valore 4
2:    valore1        valore2        valore4        valore 4
3:    valore1        valore2        valore4        valore 4
4:    valore1        valore2        valore4        valore 4
n:    valore n       valore n       valore n       valore n

All'inizio ho semplicemente creato un oggetto "MAP" con i quattro valori poi ho aggiunto ogni riga ad un oggetto "LIST"
Funziona tutto tranne che una volta salvato su file (con file.savemap) b4x trasforma tutto in string rendendo poi impossibile recuperare la lista contenente gli oggetti map.

Ho provato a convertire tutto in Json con questo codice ma ottengo un errore in fase di creazione del file:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to anywheresoftware.b4a.objects.collections.Map$MyMap

Sembra come se non potessi passare a Json un oggetto "list"

B4X:
'Storico is the list containing a maps'

Dim j As JSONGenerator
        j.Initialize(Storico)
        Dim s As String = j.ToPrettyString(2)
        File.WriteString(File.DirInternal,"Storico.json", s)

B4X:
Dim s As String = File.Readstring(File.DirInternal, "Storico.json")
            Log(s)
            'genera il file map dal json
            Dim jp As JSONParser
            jp.Initialize(s)
            Dim m As Map = jp.NextObject

Non c'è altro modo per salvare su file queste impostazioni?
L'unico modo è trasformarlo in Json?

Tks
 

Sagenut

Expert
Licensed User
Longtime User
Trasforma la tua Map o la tua List in bytes.
Per salvare
B4X:
Dim xser As B4XSerializator ' RandomAccessFile Lib
Dim data2save() As Byte = xser.ConvertObjectToBytes(m) 'm è la tua Map
File.WriteBytes(File.DirInternal,"MapData.dat",data2save)
Per leggere
B4X:
Dim xser as B4XSerializator
Dim LoadData() as Byte = File.ReadBytes(File.DirInternal, "MapData.dat"))
Dim MiaMap As Map = xser.ConvertBytesToObject(LoadData)
In questo esempio ho usato una Map.
Puoi fare la stessa cosa con una List.
 
Upvote 0

Paperinik

Member
Licensed User
Longtime User
Finalmente, grazie mille a tutti e due!!!!
alla fine ho utilizzato il metodo della conversione in bytes e funziona a meraviglia, ma per il futuro mi andrò a vedere anche la KeyValueStore.
 
Upvote 0
Top