SharedPreferences
Renda persistenti semplici dati chiave-valore tra le sessioni dell'app usando SharedPreferences. Impari a salvare, leggere e rimuovere le preferenze.
SharedPreferences è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 4 di 6. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Android Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Android Academy include 6 lezioni in totale.
Opzioni per la memorizzazione persistente
Android offre diversi modi per memorizzare i dati localmente:
- SharedPreferences — semplici coppie chiave-valore (impostazioni, token)
- Room — database SQLite strutturato (dati complessi)
- DataStore — sostituto asincrono moderno di SharedPreferences
- Files — operazioni di I/O su file grezzi
SharedPreferences è ideale per le impostazioni semplici e le preferenze dell'utente.
Che cos'è SharedPreferences?
SharedPreferences memorizza i dati come coppie chiave-valore in un file XML sul dispositivo. Supporta:
- String
- Int / Long / Float
- Boolean
- Set<String>
I dati persistono tra i riavvii dell'app e sopravvivono ai cambiamenti di configurazione (rotazione).
Ottenere un'istanza di SharedPreferences
Esistono due modi per ottenere un oggetto SharedPreferences:
// 1. Named preferences (shared across activities)
val prefs = getSharedPreferences(
"MyAppPrefs", // file name
Context.MODE_PRIVATE // only your app can read it
)
// 2. Activity's default preferences
val prefs = getPreferences(Context.MODE_PRIVATE)Scrittura dei dati
Utilizzi un Editor per scrivere i valori, quindi chiami apply():
val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)
prefs.edit()
.putString("username", "alice")
.putInt("login_count", 5)
.putBoolean("dark_mode", true)
.apply() // async, non-blocking — preferred over commit()
// Kotlin extension (cleaner syntax):
with(prefs.edit()) {
putString("username", "alice")
apply()
}Lettura dei dati
Legga i valori tramite la chiave, fornendo un valore predefinito se la chiave non esiste:
val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)
val username = prefs.getString("username", "Guest") // default: "Guest"
val count = prefs.getInt("login_count", 0) // default: 0
val darkMode = prefs.getBoolean("dark_mode", false) // default: false
println("Hello, $username! Logins: $count. Dark: $darkMode")Esempio pratico: interruttore del tema
Salvi e ripristini un'impostazione per la modalità scura:
class SettingsActivity : AppCompatActivity() {
private lateinit var binding: ActivitySettingsBinding
private lateinit var prefs: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root)
prefs = getSharedPreferences("settings", MODE_PRIVATE)
// Restore saved state
binding.switchDarkMode.isChecked = prefs.getBoolean("dark_mode", false)
binding.switchDarkMode.setOnCheckedChangeListener { _, isChecked ->
prefs.edit().putBoolean("dark_mode", isChecked).apply()
}
}
}Salvataggio di un token di accesso
Memorizzi e verifichi un token di autenticazione tra i riavvii dell'app:
// Save token after login
fun saveToken(token: String) {
getSharedPreferences("auth", MODE_PRIVATE)
.edit()
.putString("token", token)
.apply()
}
// Check if user is logged in
fun isLoggedIn(): Boolean {
val token = getSharedPreferences("auth", MODE_PRIVATE)
.getString("token", null)
return token != null
}
// Clear on logout
fun logout() {
getSharedPreferences("auth", MODE_PRIVATE)
.edit()
.remove("token")
.apply()
}Rimozione e cancellazione dei dati
Rimuova chiavi specifiche o cancelli tutti i dati:
.remove("key")— elimina una voce.clear()— elimina tutto il contenuto del file
Chiami sempre .apply() (oppure .commit() se ha bisogno di una conferma sincrona).
SharedPreferences e DataStore a confronto
SharedPreferences funziona bene, ma presenta alcune limitazioni:
- Le letture sincrone possono bloccare il thread principale
- Non offre sicurezza dei tipi
Jetpack DataStore è il sostituto moderno: completamente asincrono, con Kotlin Flow e sicurezza dei tipi. Per i nuovi progetti, preferisca DataStore. SharedPreferences è ancora ampiamente utilizzato ed è perfettamente adatto per piccole quantità di dati.
Verifica rapida
Quale metodo salva i dati in SharedPreferences in modo asincrono senza bloccare il thread dell'interfaccia utente?
Riepilogo: SharedPreferences
Ora può mantenere semplici dati tra gli avvii dell'app:
- Ottenere un'istanza con
getSharedPreferences(name, MODE_PRIVATE) - Scrivere:
.edit().putString(key, value).apply() - Leggere:
.getString(key, defaultValue) - Rimuovere:
.edit().remove(key).apply() - Preferire
apply()(asincrono) acommit()(sincrono)
Prossimo corso: architettura delle app — ViewModel, Room e Coroutines.
Domande Frequenti
La lezione «SharedPreferences» è gratuita?
Sì — il testo completo di «SharedPreferences» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Android Academy, passa a CoddyKit PRO. Il corso Android Academy include 6 lezioni in totale.
Cosa imparerò in «SharedPreferences»?
Renda persistenti semplici dati chiave-valore tra le sessioni dell'app usando SharedPreferences. Impari a salvare, leggere e rimuovere le preferenze. Eserciti Android Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Android Academy?
Non è richiesta alcuna esperienza precedente. Android Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 6.
Quanto tempo richiede la lezione «SharedPreferences»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Android Academy?
Sì. Ogni lezione Android Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Collection di Kotlin
- Nozioni di base su RecyclerView
- Eventi di clic di RecyclerView
- SharedPreferences
- DataStore Preferences
- Adapter e DiffUtil