Shared preferences in un’app android
Le Shared Preferences in Android vengono utilizzate per salvare i dati con un meccanismo di coppia chiave-valore. Possono essere utilizzate per salvare il tipo di dati primitivo: string, long, int, float e Boolean.
I dati vanno a finire in un file xml salvato nella memoria interna del dispositivo. L’oggetto SharedPreferences punta, infatti, a questo file e offre diversi metodi per leggerlo e scriverlo.
Possiamo creare un nuovo file delle preferenze condivise o accedere a uno esistente chiamando uno di questi metodi:
getSharedPreferences(String name,int mode) — Va usato se si ha bisogno di più file delle preferenze identificati dal nome, che va specificato con il primo parametro. Si può chiamarlo da qualsiasi contesto nell’app.
getPreferences(int mode) — Questo metodo va usato da un’attività e permette di utilizzare un solo file di preferenze condiviso per l’attività stessa. Poiché in questo modo viene recuperato un file delle preferenze predefinito che appartiene all’attività, non è necessario fornire un nome.
Il parametro int mode si riferisce alla privacy del file delle preferenze e può essere di tre tipi:
Context.MODE_PRIVATE – valore predefinito (non accessibile al di fuori dell’applicazione)
Context.MODE_WORLD_READABLE – leggibile ad altre app
Context.MODE_WORLD_WRITEABLE – leggibile/scrivibile da altre app
MODE_PRIVATE – È una modalità predefinita. MODE_PRIVATE significa che quando un file delle preferenze viene creato con la modalità privata, non sarà accessibile al di fuori dell’applicazione. Questa è la modalità più comune utilizzata.
MODE_WORLD_READABLE – Se lo sviluppatore crea un file delle preferenze condiviso utilizzando la modalità leggibile dal mondo, può essere letto da chiunque ne conosca il nome. Questa modalità è usata molto raramente.
MODE_WORLD_WRITEABLE – È simile a mode world readable ma con entrambi i tipi di accessi, ovvero lettura e scrittura.
Andiamo a vedere come usare questi metodi facendo un primo esempio di utilizzo del metodo getSharedPreferences(String name,int mode)
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE);
Context è una classe astratta utilizzata per ottenere informazioni globali delle risorse di un’applicazione Android come stringhe, valori, drawable, asset ecc.
Su context possiamo invocare il metodo getSharedPreferences, passando come primo paramentro il nome del file (nel nostro esempio correttamente inserito nel file xml che contiene le stringhe) e come secondo parametro uno dei modi prima illustrati.
Quando si assegna un nome ai file delle preferenze condivise, è meglio utilizzare un nome che sia identificabile in modo univoco per l’app. Un modo semplice per farlo è anteporre al nome del file l’ID dell’applicazione. Ad esempio: “com.example.myapp.PREFERENCE_FILE_KEY”.
In alternativa, se si ha bisogno di un solo file di preferenze condiviso per una singola attività, è meglio usare il metodo getPreferences():
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Vediamo adesso come scrivere nel file delle Shared Preferences.
SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score_key), newHighScore); editor.apply();
Sull’oggetto SharedPreferences creato in precedenza, chiamiamo il metodo edit().
Immettiamo quindi un intero con il metodo putInt o una stringa con il metodo putString in entrambi i casi con coppia chiave-valore. Quindi chiamamo apply() o commit() per salvare le modifiche.
Andiamo a vedere adesso come leggere questi valori immessi.
int defaultValue = 0; int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);
Per recuperare valori da un file di preferenze condiviso, possiamo usare i metodi getInt() e getString(), fornendo la chiave per il valore desiderato e, facoltativamente, un valore predefinito da restituire se la chiave non è presente (nel nostro esempio 0).
Si noti, infine, che per gestire le preferenze dell’applicazione (settings) è meglio utilizzare l’oggetto Preferences.
Maggiori informazioni sulle shared preferences qui.