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
Da notare che gli ultimi tre sono stati dichiarati "deprecated", quindi l'unica opzione valida è la modalità "privata".
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:
Applicare le modifiche
Una volta inseriti i nuovi valori o aggiornati quelli presenti, è necessario eseguire un commit per confermare le modifiche:
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.