Italian Salvataggio di una variabile tramite databases

PakoT52

Active Member
Licensed User
Longtime User
Ciao ragazzi , vi voglio chiedere una mano nel fare un codice che mi salve 2 variabili in un database e poi quando si riapre l'applicazione questi variabili vengono lette , vi spiego meglio il mio caso :
Allora io ho 10 Layout , ogni layout contiene 2 Label ( Ciascuno contenente una variabile da dover salvare ) , ed 1 button , quel button se viene cliccato va al layout N°2 e cambia il valore dei 2 label , io volevo fare che quando clicchi il button vengono salvate le variabili e ad ogni click del button vengono salvate , poi quando si riapre l'app e si clicca sul bottone "Inizia" vengono caricate le variabili , ho seguito il tutorial di filippo cascio ma niente , oltre che mi dava errore , non sono riuscito a capire come fare . Spero mi diate una mano , grazie
 

Spinter

Active Member
Licensed User
Longtime User
Due funzioni che trovi nel forum una scrive l'altra legge!
B4X:
Public Sub  WriteIni(mykey As String,myvalue As String,fPath As String,filename As String)As String
    Dim Map1 As Map
    Map1.Initialize
    If File.Exists(fPath,filename) Then
    Else
        File.WriteMap(fPath, filename, Map1)  'to create it if not exist
    End If
    Map1 = File.ReadMap(fPath,filename)
                Map1.Put(mykey, myvalue)
    File.WriteMap(fPath, filename, Map1)
End Sub
 
Public Sub ReadIni(key As String,fPath As String,filename As String) As String
    Dim Map1 As Map
    Map1 = File.ReadMap(fPath,filename)
    For i = 0 To Map1.Size - 1
        If Map1.GetKeyAt(i) = key Then
            Return Map1.GetValueAt(i)
        End If
    Next
End Sub





Chiami la funzione per scrivere come vedi se vuoi salvare la 3à variabile devi mettere 3 e via 4 ecc
B4X:
WriteIni(1,"Test 1",File.DirDefaultExternal, "config.ini")
WriteIni(2,"Test 2",File.DirDefaultExternal, "config.ini")

Per leggere la prima variabile salvata 1
B4X:
Dim str As String
  str=ReadIni(1,File.DirDefaultExternal, "config.ini")
  Label1.text= str

Al primo caricamento crea il file!
B4X:
If File.Exists(File.DirDefaultExternal, "config.ini") Then
Else
File.WriteString(File.DirDefaultExternal, "config.ini", "")
Func.WriteIni(1,"",File.DirDefaultExternal, "config.ini")
End If
 
Last edited:

PakoT52

Active Member
Licensed User
Longtime User
Quando inserisco i codici per leggere e/o scrivere mi da errore Func. , forse ci vuole qualche libreria ?
 
Last edited:

Spinter

Active Member
Licensed User
Longtime User
Scusa togli Func. uso una modulo!



Al primo caricamento crea il file!
B4X:
If File.Exists(File.DirDefaultExternal, "config.ini") Then
Else
File.WriteString(File.DirDefaultExternal, "config.ini", "")
Func.WriteIni(1,"",File.DirDefaultExternal, "config.ini")
End If
 
Last edited:

PakoT52

Active Member
Licensed User
Longtime User
Mi da un errore in questa stringa:
B4X:
 Map1 = File.ReadMap(fPath,filename)
main_readini (B4A line: 30)
Map1 = File.ReadMap(fPath,filename)
java.io.FileNotFoundException: /storage/emulated/0/Android/data/b4a.example/files/config.ini: open failed: ENOENT (No such file or directory)
at libcore.io.IoBridge.open(IoBridge.java:416)
at java.io.FileInputStream.<init>(FileInputStream.java:78)
at anywheresoftware.b4a.objects.streams.File.OpenInput(File.java:197)
at anywheresoftware.b4a.objects.streams.File.ReadMap2(File.java:302)
at anywheresoftware.b4a.objects.streams.File.ReadMap(File.java:289)
at b4a.example.main._readini(main.java:1412)
at b4a.example.main._activity_create(main.java:290)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
at b4a.example.main.afterFirstLayout(main.java:89)
at b4a.example.main.access$100(main.java:16)
at b4a.example.main$WaitForLayout.run(main.java:74)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5328)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
at libcore.io.IoBridge.open(IoBridge.java:400)
... 21 more
 

PakoT52

Active Member
Licensed User
Longtime User
Questo lo metto nel Activity_Create
B4X:
If File.Exists(File.DirDefaultExternal, "config.ini") Then
Else
File.WriteString(File.DirDefaultExternal, "config.ini", "")
Func.WriteIni(1,"",File.DirDefaultExternal, "config.ini")
End If
Questo lo metto al click del botone ma devo modificare Testi 1 con il nome della mia variabile ?
B4X:
WriteIni(1,"Test 1",File.DirDefaultExternal, "config.ini")
WriteIni(2,"Test 2",File.DirDefaultExternal, "config.ini")
E questo dove lo metto ? E se il label1.text contiene la variabile punti , come faccio a fargli mettere la variabile str ?
B4X:
Dim str As String
  str=ReadIni(1,File.DirDefaultExternal, "config.ini")
  Label1.text= str
Grazie mille del tuo aiuto
 
Last edited:

Spinter

Active Member
Licensed User
Longtime User
puoi fare cosi!!

B4X:
'controllo se il file esiste, se esiste leggo la variabile
'se non esiste vuole a dire che è la prima volta che carico la app e allora scrivo un file di config!
If File.Exists(File.DirDefaultExternal, "config.ini") Then
Dim str As String
str=ReadIni(1,File.DirDefaultExternal, "config.ini")
Label1.text= str
Else
File.WriteString(File.DirDefaultExternal, "config.ini", "")
WriteIni(1,"",File.DirDefaultExternal, "config.ini")
End If

B4X:
'la metti come vuoi o con un bottone o alla chiusura del app!
WriteIni(1,"Test 1",File.DirDefaultExternal, "config.ini")
 
Last edited:

PakoT52

Active Member
Licensed User
Longtime User
Ho risolto grazie mille comunque , con questo codice posso anche salvare il layout e quando riapro l'applicazione mi trovo sullo stesso layout ?
 

Spinter

Active Member
Licensed User
Longtime User
Ho risolto grazie mille comunque , con questo codice posso anche salvare il layout e quando riapro l'applicazione mi trovo sullo stesso layout ?
naturalmente devi scrivere un po di codice prima di uscire salare che layout hai e poi ricaricare quella che hai salvato!

If str = "Test 1!"Then
Activity.LoadLayout("1")
EndIf
 
Last edited:

PakoT52

Active Member
Licensed User
Longtime User
Intanto ti ringrazio infinitamente del tuo aiuto , poteri far scrivere un file con il nome del layout dentro e poi far caricare il layout , però come posso dire di scrivere il nome del layout ?
 

PakoT52

Active Member
Licensed User
Longtime User
Salvare il layout cioè , se io chiudo l'app nel layout "Ly3" , quando riapro l'app , dopo aver cliccato un button ( che sarebbe la home ) devo andare nel Ly3 e non nel Ly1 .
 
Top