Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 29 di 97
  • livello avanzato
Indice lezioni

Memorizzare informazioni con SharedPreferences

Come salvare informazioni e dati in locale utilizzando utilizzando SharedPreferences e coppie di chiave/valore.
Come salvare informazioni e dati in locale utilizzando utilizzando SharedPreferences e coppie di chiave/valore.
Link copiato negli appunti

L'utilizzo dei file come collocazione di dati persistenti è molto duttile. Ai fini della programmazione Android, la possibilità di salvare dati grezzi mediante Stream apre la strada a moltissime possibilità. Si possono salvare file binari, con codifiche proprie, serializzare strutture dati Java o ricorrere a formati “a caratteri” come CSV o altro ancora.

A volte però, si ha solo bisogno di salvare dati in locale, magari di tipo primitivo, come password, indirizzi IP, numeri o altre informazioni di configurazione piuttosto elementari. In questi casi più che confrontarsi con la varietà offerta dai file farebbe comodo una specie di mappa in cui salvare coppie chiave/valore con la possibilità di renderla persistente su disco.

Tutto ciò è disponibile e prende il nome di SharedPreferences.

I dati collocati nelle SharedPreferences vengono salvati in un file XML contenuto nello storage interno, precisamente nella cartella shared_prefs. Il file in cui sono contenute può avere un nome di default o assegnato dal programmatore pertanto di potrà accedere alle Preferences in due modi:

  • nella modalità di default con il metodo getPreferences(). Questo metodo è concepito per salvare dati privati dell'Activity. Il nome di default prodotto per il file richiamerà infatti il nome dell'Activity;
  • specificando un nome di file con getSharedPreferences(String filename, int mode) dove il primo parametro indica il nome che si vuole dare al file di preferenze mentre il secondo sono i priviligi da concedere al file.

Entrambi i metodi restituiranno un oggetto SharedPreferences sul quale si potrà agire come su di una mappa. Ad esempio:

import android.content.SharedPreferences;
...
...
// supponiamo di essere in un metodo di una comune Activity
SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);

Si noterà subito che un oggetto SharedPreferences contiene tipici metodi di lettura come:

  • contains(String key) che verifica se una proprietà con una certa etichetta è già stata salvata;
  • una serie di metodi getter come getInt, getString, getFloat e via dicendo con i quali si potrà recuperare i dati salvati per una certa chiave.

Una possibile operazione di lettura di un numero intero mediante SharedPreferences potrebbe essere:

SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);
int savedValue = sharedPref.getInt(getString(R.string.saved_value), 22);

dove abbiamo salvato la chiave in una risorsa stringa ed impostato il numero 22 come valore di default.

Tra le altre funzionalità disponibili, si vedrà anche un metodo edit() che restituisce un oggetto di tipo Editor. Questa classe è il meccanismo di modifica delle SharedPreferences.

Dall'Editor si avrà accesso a molti metodi put che permettono di modificare le proprietà. Al termine delle modifiche è molto importante che si richieda il salvataggio delle stesse invocando il metodo apply(), anch'esso dell'oggetto Editor.

Ecco quindi un esempio di scrittura di SharedPreferences:

SharedPreferences.Editor edt = sharedPref.edit();
edt.putInt(getString(R.string.saved_value), 15);
edt.apply();

Semplicità delle mappe, utilità della persistenza, se vi si aggiunge la frequenza in cui si necessita di salvare dati così semplici si comprende perchè le SharedPreferences siano considerate uno strumento importantissimo per il programmatore.

Ti consigliamo anche