Se vuoi salvare una raccolta relativamente piccola di coppie chiave-valore, puoi utilizzare le API SharedPreferences
. Un oggetto SharedPreferences
fa riferimento a un file contenente coppie chiave-valore e fornisce 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.
Ottenere un handle per le preferenze condivise
Puoi creare un nuovo file delle preferenze condivise o accedere a uno esistente chiamando uno dei seguenti metodi:
getSharedPreferences()
: utilizza questa opzione se hai bisogno di più file di preferenze condivise identificati per nome e specificati con il primo parametro. Puoi chiamare questa operazione da qualsiasiContext
nella tua app.getPreferences()
: utilizza questa opzione da unActivity
se devi usare un solo file delle preferenze condivise per l'attività. Poiché viene recuperato un file delle preferenze condivise predefinito che appartiene all'attività, non è necessario fornire un nome.
Ad esempio, il seguente codice accede al file delle preferenze condivise identificato dalla stringa della risorsa R.string.preference_file_key
e lo apre utilizzando la modalità privata, in modo che sia accessibile solo alla 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 condivise, 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 di preferenze condiviso per la tua attività,
puoi utilizzare il metodo getPreferences()
:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Se utilizzi l'API SharedPreferences
per salvare le impostazioni dell'app, devi utilizzare getDefaultSharedPreferences()
per ottenere il file delle preferenze
condivise predefinite per l'intera app. Per ulteriori informazioni, consulta la
guida per gli sviluppatori alle impostazioni.
Scrivi nelle preferenze condivise
Per scrivere in un file delle preferenze condiviso, crea un SharedPreferences.Editor
chiamando edit()
sul tuo SharedPreferences
.
Passa le chiavi e i valori che vuoi scrivere con metodi come:
putInt()
eputString()
. Quindi chiama apply()
o
commit()
per salvare le modifiche. Ad esempio:
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 su disco in modo asincrono. In alternativa, puoi utilizzare commit()
per scrivere i dati su disco in modo sincrono. Ma poiché commit()
è sincrono, dovresti evitare di chiamarlo dal tuo thread principale perché potrebbe mettere in pausa il rendering della tua UI.
Leggi dalle preferenze condivise
Per recuperare i valori da un file delle preferenze condiviso, chiama 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. Per
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);