T#007 – Panoramica sulla gestione delle preferenze delle nostre applicazioni Android tramite SharedPreferences

Ciao a tutti, oggi affrontiamo un tema molto interessante e soprattutto utile a tutti gli sviluppatori Android: la memorizzazione dei dati per quanto riguarda la gestione delle preferenze delle proprie applicazioni. Memorizzare dati in generale su Android, in realtà, può avvenire in diversi modi e la scelta va ovviamente effettuata in base alle proprie esigenze. Ad esempio, una mappa di dati primitivi, potrebbe essere salvata usando le shared preferences, un file potrebbe essere salvato nella memoria interna o esterna (solitamente una scheda sd) del device o ancora un insieme di dati più strutturato potrebbe essere salvato all’interno di un database SQLite messo a disposizione da Android. In questo nuovo tutorial di programmazione Android vedremo un semplice esempio di utilizzo del primo caso tramite shared preferences.

Come funziona SharedPreferences

La classe SharedPreferences fornisce un framework che ci permette di memorizzare una map di coppie chiave-valore. In particolare la chiave della coppia è sempre una String mentre il valore può essere un tipo primitivo boolean, int, float, long o un oggetto di tipo String. I valori sono memorizzati fisicamente in file xml e sono disponibili anche dopo un riavvio dell’applicazione o del telefono.

All’interno di una Activity un oggetto SharedPreferences può essere creato richiamando semplicemente il metodo getPreferences, il parametro passato indica se il corrispondente file xml deve essere privato o leggibile anche dalle altre applicazioni installate sul device.

1
SharedPreferences prefs = getPreferences(MODE_PRIVATE);

Usando il metodo getPreferences di Activity i valori memorizzati sono privati e disponibili solo dall’Activity. Se vogliamo creare un oggetto SharedPreferences utilizzabile in più Activity all’interno dell’applicazione possiamo usare il metodo statico getDefaultSharedPreferences della classe PreferenceManager:

1
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

Lettura di un valore

Per ricavare il valore associato a una chiave deve essere usato un metodo diverso in base al tipo del valore, esistono i metodi getBoolean, getInt, getFloat, getLong e getString che hanno come parametri una stringa contenente la chiave e il valore di default da ritornare nel caso in cui la chiave non sia presente. Esiste anche un metodo getAll che ritorna una Map con tutte le coppie presenti.

Per esempio per leggere un boolean associato a una chiave potremmo usare il metodo getBoolean in questo modo:

1
2
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
boolean primoAvvio = prefs.getBoolean(PRIMO_AVVIO, true);

Memorizzazione di un valore

Per memorizzare un valore è invece necessario richiamare il metodo edit di SharedPreferences. Questo metodo ritorna un oggetto Editor che permette di salvare valori usando i metodi putBoolean, putInt, putFloat, putLong e putString. Dopo aver richiamato uno o più di questi metodi dovrà essere richiamato anche il metodo commit, in caso contrario i valori non verranno effettivamente salvati.

Vediamo un semplice esempio che usa un oggetto SharedPreferences per memorizzare un boolean che indica se l’applicazione è già stata avviata altre volte. Nel caso in cui sia il primo avvio viene mostrato a video un messaggio usando la classe Toast:

1
2
3
4
5
6
7
8
9
10
11
12
private void mostraToastPrimoAvvio()
{
	SharedPreferences prefs = getPreferences(MODE_PRIVATE);
	if (prefs.getBoolean(PRIMO_AVVIO, true))
	{
		Toast.makeText(this, R.string.primo_avvio, 
			Toast.LENGTH_LONG).show();
		Editor prefsEditor = prefs.edit();
		prefsEditor.putBoolean(PRIMO_AVVIO, false);
		prefsEditor.commit();
	}
}

Conclusioni

Come vedete niente di complesso. Il risultato finale è questo, ovviamente lanciando una seconda volta l’applicazione il messaggio “Primo avvio” non verrà visualizzato:



Come al solito sono disponibili per il download i sorgenti del progetto per Eclipse contenente il semplice esempio mostrato in questo articolo. Nel prossimo tutorial vedremo un esempio più complesso (e più utile!) in cui creeremo una Activity che permetterà all’utente della nostra applicazione Android di impostare le proprie preferenze.

By Fabio Collini

Da agosto 2009 sono un freelance android developer, ho rilasciato due applicazioni nell'Android Market: Apps Organizer e Folder Organizer. Presso OmniaGroup ricopro il ruolo di Tech Leader nell'ambito di un progetto di rich internet application che utilizza JSF, JPA(EclipseLink) ed EJB3.

4 comments

  1. I tuoi tutorial e sorgenti sono una manna dal cielo per chi come noi inizia adesso!!! Non vediamo l’ora di leggere il prossimo tutorial più complesso!!!
    Grazie!!!!!
    Magari potresti fare un esempio dove una ListView manipoli dei file audio o video o immagini ?
    Grazie ancora!

    1. Ciao, troppo buono! Hai ragione un tutorial che spiega come mostrare una lista (o una tabella) con le immagini va fatto! Non capisco bene a che serve una lista che manipola file audio, a che ti riferisci?

  2. Ciao! Grazie mille per i tutorial..! Volevo chiedere se non esiste un modo per salvare le preferenze e fare in modo che queste abbiamo effetto immediato.. senza bisogno di attendere il riavvio dell’app…!
    Grazie ancora!

    1. Ciao, dipende da cosa salvi nelle preferenze. Di solito funziona anche senza riavviare tutto…
      Nel tuo caso cosa devi salvare?

Comments are closed.