Salvare login e password sul dispositivo: SharedPreferences

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:

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.

Generare un colore randomico di tonalità "pastello"

Questo script restituisce il codice di un colore generato a caso nelle tonalità pastello. La generazione viene definita attraverso le 3 ca...