Le applicazioni Android possono memorizzare i dati nelle preferenze dell'applicazione. In questo tutorial, si impara come memorizzare i dati delle applicazioni persistenti con le preferenze condivise.
L'SDK di Android offre API utili per l'archiviazione e il recupero delle preferenze dell'applicazione. Le preferenze vengono memorizzate come gruppi di coppie chiave / valore e sono disponibili a livello di attività o condivise tra tutte le classi di attività per una determinata applicazione (ma non al di fuori del pacchetto dell'applicazione).
Le preferenze condivise sono semplicemente insiemi di valori di dati che sono memorizzati in modo persistente. Per persistenza, stiamo parlando di dati che persistono durante gli eventi del ciclo di vita delle applicazioni. In altre parole, l'applicazione (o il dispositivo, per quella materia) può essere avviato e arrestato senza perdere i dati. La prossima volta che l'utente avvia l'applicazione, tali dati saranno comunque disponibili.
Una preferenza individuale è semplicemente una coppia chiave-valore con un tipo di dati specifico per il valore. La chiave di preferenza è semplicemente una stringa che identifica in modo univoco la preferenza e il valore è proprio questo: il valore di tale preferenza.
Ad esempio, l'applicazione potrebbe voler memorizzare il nome dell'utente. L'applicazione potrebbe avere una singola preferenza per memorizzare queste informazioni:
Una preferenza può essere qualsiasi di un certo numero di tipi di dati diversi. I seguenti tipi di dati sono supportati dalla classe SharedPreferences:
L'SDK di Android include classi utili per attivare e attivare facilmente le preferenze delle applicazioni. Le funzionalità delle preferenze possono essere trovate nell'interfaccia SharedPreferences del pacchetto android.content.
Un'applicazione può avere più set di preferenze dell'applicazione, in cui ogni set ha un nome. Ad esempio, un'applicazione di gioco potrebbe avere una serie di preferenze per le informazioni dell'utente (nome utente, email, punteggio elevato, ecc.) E una serie di preferenze per lo stato del gioco (livello attuale, punteggio attuale, ecc.). Le preferenze possono essere memorizzate a livello di attività o applicazione.
Le preferenze a livello di applicazione sono disponibili in tutte le attività. Queste preferenze vengono recuperate utilizzando il metodo di classe Context dell'applicazione chiamato getSharedPreferences () per nome. Per esempio:
import android.content.SharedPreferences; ... SharedPreferences settings = getSharedPreferences ("MyGamePreferences", MODE_PRIVATE);
Non c'è limite al numero di serie di preferenze condivise che l'applicazione può avere. Come la tua applicazione organizza le sue preferenze dipende da te. Tuttavia, è possibile dichiarare i propri nomi di set di preferenze in modo che sia possibile caricare e accedere facilmente alle preferenze da qualsiasi attività all'interno dell'applicazione. Per esempio:
public static final String PREFERENCE_FILENAME = "AppGamePrefs";
Un'attività può anche avere preferenze private. Queste preferenze sono disponibili solo all'interno della specifica classe di attività e non sono condivise con altre attività. Un'attività può avere solo un set di preferenze private. Il seguente codice recupera le preferenze private dell'attività:
import android.content.SharedPreferences; ... SharedPreferences settingsActivity = getPreferences (MODE_PRIVATE);
Salvare le preferenze per la tua applicazione è abbastanza semplice. Per prima cosa, devi decidere se vuoi preferenze per applicazioni o attività. Utilizzare il metodo appropriato per recuperare l'oggetto SharedPreferences appropriato: utilizzare il metodo getPreferences () della classe Activity per le preferenze a livello di attività o il metodo getSharedPreferences () della classe Context per le preferenze a livello di applicazione.
Una volta che hai un oggetto SharedPreferences valido, devi utilizzare SharedPreferences.Editor per aggiungere, modificare o eliminare il contenuto delle preferenze. Per recuperare un editor per un oggetto SharedPreferences specifico, utilizzare il suo metodo edit (). Apporta eventuali modifiche alle preferenze utilizzando i metodi disponibili nella classe Editor. Ad esempio, la classe SharedPreferences.Editor ha metodi di supporto per il salvataggio delle preferenze di diversi tipi di dati:
All'interno dell'Editor, puoi anche rimuovere una preferenza specifica per nome usando il metodo remove (), oppure rimuovere tutte le preferenze all'interno del set usando il metodo clear (). Una volta terminata la modifica dell'oggetto SharedPreferences, è possibile salvare le modifiche utilizzando il metodo commit () dell'editor.
Ad esempio, il codice seguente recupera una serie di preferenze dell'applicazione denominata "MyGamePreferences" e aggiunge una preferenza di stringa denominata "UserName" con un valore di "Guest123" e una preferenza booleana denominata "PaidUser" con un valore di false.
import android.content.SharedPreferences; ... SharedPreferences gameSettings = getSharedPreferences ("MyGamePreferences", MODE_PRIVATE); SharedPreferences.Editor prefEditor = gameSettings.edit (); prefEditor.putString ("UserName", "Guest123"); prefEditor.putBoolean ("PaidUser", false); prefEditor.commit ();
L'aggiornamento delle preferenze è semplice come recuperare un altro SharedPreferences.Editor e apportare modifiche a una determinata preferenza per nome. Ad esempio, il seguente codice modifica la preferenza "PaidUser":
SharedPreferences gameSettings = getSharedPreferences ("MyGamePreferences", MODE_PRIVATE); SharedPreferences.Editor prefEditor = gameSettings.edit (); prefEditor.putBoolean ("PaidUser", true); prefEditor.commit ();
Suggerimento: come puoi vedere, può essere utile definire ogni chiave di preferenza come variabile di stringa finale statica in modo che una determinata preferenza venga sempre memorizzata in modo regolare e riproducibile. Non vuoi che le stringhe delle preferenze casuali scorrano nel tuo codice.
Non hai bisogno di un editor per leggere semplicemente le preferenze. Invece, recuperare l'oggetto SharedPreferences e utilizzare il metodo appropriato per recuperare una preferenza per nome:
Ciascuno di questi metodi ha due parametri: la stringa della chiave di preferenza e un valore predefinito da restituire se la preferenza non è definita.
Puoi anche verificare l'esistenza di una preferenza per nome usando il metodo contains (). È anche possibile scorrere tutte le preferenze per un determinato set utilizzando il metodo getAll () della classe SharedPreferences.
L'applicazione può ascoltare e reagire alle modifiche alle preferenze condivise implementando un listener e registrandolo con l'oggetto SharedPreferences specifico utilizzando i metodi registerOnSharedPreferenceChangeListener () e unregisterOnSharedPreferenceChangeListener ().
Le preferenze condivise (android.content.SharedPreferences) possono essere utilizzate per memorizzare facilmente i dati dell'applicazione. Le preferenze dell'applicazione sono memorizzate come coppie chiave-valore e possono essere molti tipi di dati diversi, inclusi numeri, stringhe e valori booleani. Diverse serie di preferenze possono essere memorizzate in insiemi di preferenze con nome. Utilizza le preferenze condivise per archiviare i dati delle applicazioni semplici in modo persistente.
Gli sviluppatori mobili Lauren Darcey e Shane Conder hanno coautore diversi libri sullo sviluppo di Android: un libro di programmazione approfondito intitolato Sviluppo di applicazioni wireless Android e Sams TeachYourself Sviluppo di applicazioni Android in 24 ore. Quando non scrivono, passano il loro tempo a sviluppare software mobile presso la loro azienda ea fornire servizi di consulenza. Possono essere contattati via email a [email protected], tramite il loro blog su androidbook.blogspot.com e su Twitter @androidwireless.