Se hai una raccolta relativamente piccola di coppie chiave-valore che vorresti salvare,
puoi utilizzare le API SharedPreferences
. Un oggetto SharedPreferences
rimanda a un file contenente coppie chiave-valore e offre metodi semplici per leggerle e scriverle. Ogni file SharedPreferences
è gestito dal framework e può essere privato o condiviso.
Questa pagina mostra come utilizzare le API SharedPreferences
per archiviare e recuperare valori semplici.
Ottieni un handle per le preferenze condivise
Puoi creare un nuovo file delle preferenze condiviso o accedere a uno esistente chiamando uno di questi metodi:
getSharedPreferences()
: utilizza questa opzione se hai bisogno di più file di preferenze condivisi identificati per nome, che specifichi con il primo parametro. Puoi chiamare da qualsiasiContext
nella tua app.getPreferences()
: utilizza questa opzione da unActivity
se devi usare un solo file delle preferenze condiviso per l'attività. Poiché in questo modo viene recuperato un file delle preferenze condivise predefinito che appartiene all'attività, non è necessario specificare un nome.
Ad esempio, il codice seguente accede al file delle preferenze condiviso
identificato dalla stringa della risorsa R.string.preference_file_key
e lo apre
utilizzando la modalità privata in modo che il file sia accessibile solo dalla tua app:
Kotlin
val sharedPref = activity?.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE)
Java
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE);
Quando assegni un nome ai file delle preferenze condivisi, devi utilizzare un nome che sia identificabile in modo univoco per la tua app. Un buon modo per farlo è anteporre al nome del file il tuo ID applicazione. Ad esempio:
"com.example.myapp.PREFERENCE_FILE_KEY"
In alternativa, se hai bisogno di un solo file delle preferenze condiviso per le tue attività,
puoi utilizzare il metodo getPreferences()
:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Se usi l'API SharedPreferences
per salvare le impostazioni dell'app, dovresti usare getDefaultSharedPreferences()
per recuperare il file delle preferenze condivise predefinito per l'intera app. Per ulteriori informazioni, consulta la guida per gli sviluppatori sulle impostazioni.
Scrivi nelle preferenze condivise
Per scrivere in un file delle preferenze condiviso, crea una SharedPreferences.Editor
chiamando edit()
sul tuo SharedPreferences
.
Trasmetti le chiavi e i valori che vuoi scrivere con metodi come putInt()
e putString()
. Quindi chiama apply()
o commit()
per salvare le modifiche. Ecco alcuni esempi:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_high_score_key), newHighScore) apply() }
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score_key), newHighScore); editor.apply();
apply()
modifica immediatamente l'oggetto SharedPreferences
in memoria, ma
scrive gli aggiornamenti sul disco in modo asincrono. In alternativa, puoi usare commit()
per scrivere i dati su disco in modo sincrono. Tuttavia, poiché commit()
è sincrono, dovresti evitare di chiamarlo dal thread principale perché potrebbe mettere in pausa il rendering della UI.
Leggere dalle preferenze condivise
Per recuperare i valori da un file delle preferenze condiviso, richiama metodi come getInt()
e getString()
, fornendo la chiave per il valore che vuoi e, facoltativamente, un valore predefinito da restituire se la chiave non è presente. Ad esempio:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key) val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key); int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);