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.

Nessun commento:

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...