0Pricing
Android Academy · Lezione

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) a commit() (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

  1. Collection di Kotlin
  2. Nozioni di base su RecyclerView
  3. Eventi di clic di RecyclerView
  4. SharedPreferences
  5. DataStore Preferences
  6. Adapter e DiffUtil
← Torna a Android Academy