Italian creare file setting

ivanomonti

Expert
Licensed User
Longtime User
Chi mi da delle idee di come creare un file setting semplice (4/5 parametri) o seguire una guida.

Ho bisogno di memorizzare 3 dati e da recuperare ad ogni avvio, senza per il momento usare un database, e se possibile i dati criptarli.

Cordialmente Ivano Monti.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Puoi usare un file di testo, simile ai file INI di Windows, con chiavi e rispettivi valori in corrispondenza biunivoca.

B4X:
'--- In Activity_create

If FirstTime Then
   If Not(File.Exists(File.DirRootExternal,NomeFileIni)) Then
      Map1.Initialize
      Map1.Put("Chiave 1" , Valore1)
      Map1.Put("Chiave 2" , Valore2)
                File.WriteMap(File.DirRootExternal, NomeFileIni, Map1)
   End If
End If

B4X:
'--- fase di lettura
Map1 = File.ReadMap(File.DirRootExternal,NomeFileIni)
For i = 0 To Map1.Size - 1
   Select Case Map1.GetKeyAt(i)
            Case "Chiave 1" : Valore1 = Map1.GetValueAt(i) 
      Case "Chiave 2" : Valore2 = Map1.GetValueAt(i) 
   End Select      
Next

Il sistema non è crittato ma può costituire un inizio ...
 

ivanomonti

Expert
Licensed User
Longtime User
Puoi usare un file di testo, simile ai file INI di Windows, con chiavi e rispettivi valori in corrispondenza biunivoca.

B4X:
'--- In Activity_create

If FirstTime Then
   If Not(File.Exists(File.DirRootExternal,NomeFileIni)) Then
      Map1.Initialize
      Map1.Put("Chiave 1" , Valore1)
      Map1.Put("Chiave 2" , Valore2)
                File.WriteMap(File.DirRootExternal, NomeFileIni, Map1)
   End If
End If

B4X:
'--- fase di lettura
Map1 = File.ReadMap(File.DirRootExternal,NomeFileIni)
For i = 0 To Map1.Size - 1
   Select Case Map1.GetKeyAt(i)
            Case "Chiave 1" : Valore1 = Map1.GetValueAt(i) 
      Case "Chiave 2" : Valore2 = Map1.GetValueAt(i) 
   End Select      
Next

Il sistema non è crittato ma può costituire un inizio ...

Direi quasi perfetto, per il momento sembra coprire le mie esigenze, attendo altre idee.
 

arenaluigi

Well-Known Member
Licensed User
Longtime User
Allora io fatto così:

- Ho creato un modulo Chiamato Preferences, dove ho il seguente codice:
B4X:
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.
   Dim manager As PreferenceManager
   
End Sub

poi per testare ti crei una editbox ed un button, che ti serviranno per salvare il parametro.

Per salvare il dato scritto nella edittext, serve questa riga di codice:
B4X:
manager.SetString("parametro",edittext.text)

Per caricare il parametro nella editext devi scrivere:
B4X:
editetext.text=manager.GetString("parametro")

Chiaro che il parametro può essere di qualsiasi tipo.
Non devi per forza crearti un modulo, anzi se vuoi fare una cosa fatta bene ti crei una classe contenente le funzionalità delle preferences(salva, carica,ecc..) con i tutti i parametri.
Per criptare i parametri hai due soluzioni:
1 ti crei tu un algoritmo per la criptazione e la decriptazione
2 Cerchi in giro una libreria già esistente.

Ciao
 

ivanomonti

Expert
Licensed User
Longtime User
Allora io fatto così:

- Ho creato un modulo Chiamato Preferences, dove ho il seguente codice:
B4X:
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.
   Dim manager As PreferenceManager
   
End Sub

poi per testare ti crei una editbox ed un button, che ti serviranno per salvare il parametro.

Per salvare il dato scritto nella edittext, serve questa riga di codice:
B4X:
manager.SetString("parametro",edittext.text)

Per caricare il parametro nella editext devi scrivere:
B4X:
editetext.text=manager.GetString("parametro")

Chiaro che il parametro può essere di qualsiasi tipo.
Non devi per forza crearti un modulo, anzi se vuoi fare una cosa fatta bene ti crei una classe contenente le funzionalità delle preferences(salva, carica,ecc..) con i tutti i parametri.
Per criptare i parametri hai due soluzioni:
1 ti crei tu un algoritmo per la criptazione e la decriptazione
2 Cerchi in giro una libreria già esistente.

Ciao

Perfetto, questo e molto pulito e chiarissimo, provato ora e funziona da dio. ora mi faccio una classe che posso portarmi in giro per le varie app.

Grazie dell'aiuto.
 

ivanomonti

Expert
Licensed User
Longtime User
Ottimo !!!!:sign0098:

Un'ultima cosa, queste key come si eliminano eventualmente dal dispositivo perchè manager.ClearAll mi sembra eccessivo ad esempio io creo chiave1 e poi voglio eliminarla non esiste manager.delete("chiave1), ClearAll poi elimina solo quelle della app o tutte le chiavi esistenti!

Grazie ancora per la vostra pazienza
 

arenaluigi

Well-Known Member
Licensed User
Longtime User
Allora,
puoi fare così.

Anche se io onestamente la lascerei vuota, comunque:
1 Devi avviare la tua applicazione
2 Andare nella cartella di installazione del sdk di android, nella cartella tool trovi un file che si chiama ddms.bat, lo esgui e lui ti apre una finestra da dove puoi gestire molte cose.Quello che a te interessa e il menù device--> file explorer , ci clicchi e da li puoi navigare nel tuo emulatore, il percorso è data->data ->il tuo pacakage-> shared preferences, a questo punto elimini il file.

3 riapri il tuo sorgente elimini dal fisicamente dal codice il tuo parametro che non ti serve.
4 Poi fai ripartire la tua app ed avrai il nuovo file senza il parametro eliminato.

Ovvio la procedura è lunga, però torna utile per conoscere lo strumento ddms.
Invece di questa procedura puoi semplicemente disinstallare la tua app e seguire i passi dal punto 3.

Non credo esiste un metodo per eliminare a runtime un parametro nelle shared preferences.

Un altra cosa che puoi provare è usare il metodo clearall, ma credo che mette tutte le voci a blank ma loro esistono sempre.
Ciao
 
Top