Nel creare un'app "privata" appoggiata ad un web service online, ho dovuto scontrarmi con la gestione dell'autenticazione.
Una volta ottenuto il riconoscimento, ho deciso che l'app avrebbe dovuto salvare i dati (email e password) per poi presentarli alla successiva richiesta.
Gestione di dati
Android mette a disposizione un sistema per salvare ed utilizzare dati di configurazione all'interno dell'app: lo SharedPreference.
L'oggetto in questione punta ad un file contenente combinazioni chiave-valore e fornisce metodi per la lettura e la scrittura degli stessi. Questi file, gestiti dal framework, possono essere marcati come privati o come condivisi.
Tipologie di dati
Gli oggetti che possono essere salvati e recuperati dallo SharedPreference possono essere di vario tipo:
- boolean
- float
- int
- long
- string
Dati immutabili
E' importante capire che gli oggetti ritornati dalle varie funzioni get devono essere trattati come immutabili dall'applicazione.
Creazione di uno SharedPreference
La creazione è abbastanza semplice: si richiama il metodo getSharedPreferences, a cui viene passato il nome del file da leggere e la modalità di operazione.
Questo è il codice:
1 | SharedPreferences sp = getSharedPreferences("Login", MODE_PRIVATE); |
Modalità di operazione
Queste sono le modalità operative legate agli SharedPreference:- MODE_PRIVATE
- MODE_WORLD_READABLE
- MODE_WORLD_WRITEABLE
- MODE_MULTI_PROCESS
Salvare nuovi valori o aggiornare i valori presenti
Per mantenere la consistenza dei dati, è necessario utilizzare un editor. Una volta creato l'oggetto, bisogna quindi generare un SharedPreferences.Editor:
1 | SharedPreferences.Editor spEd = sp.edit(); |
A questo punto si può inserire un nuovo valore (o aggiornare un valore già presente) con una delle funzioni put presenti.
Un esempio:
1 2 | spEd.putString("email", field_email); spEd.putString("password", field_password); |
Il primo campo indica la chiave per il successivo recupero, il secondo campo invece è il contenuto da salvare / aggiornare.
Per eliminare un valore presente, invece, si richiama la funzione remove:
1 | spEd.remove("email"); |
Applicare le modifiche
Una volta inseriti i nuovi valori o aggiornati quelli presenti, è necessario eseguire un commit per confermare le modifiche:
1 | spEd.commit(); |
Lettura dei valori presenti
La lettura dei valori già salvati è anche più semplice, dato che non occorre generare un editor:
1 2 3 | SharedPreferences spGet = this.getSharedPreferences("Login", MODE_PRIVATE); String mail_recuperata = spGet.getString("email", null); String pass_recuperata = spGet.getString("password", null); |
Il secondo parametro passato a getString è il valore di default restituito nel caso in cui la voce non fosse presente nello SharedPreference.