0Pricing
Android Academy · Lezione

Preferences DataStore

Salvi impostazioni chiave-valore in modo reattivo.

Preferences DataStore è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. 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 4 lezioni in totale.

Preferences DataStore

Preferences DataStore memorizza semplici coppie chiave-valore, proprio come SharedPreferences, ma con la moderna API asincrona. Non impone uno schema né la sicurezza dei tipi sull'intero oggetto.

È possibile accedere ai valori tramite chiavi tipizzate.

Creare il DataStore

Si crea una singola istanza di DataStore per file usando il delegate di proprietà preferencesDataStore al livello superiore di un file Kotlin. name diventa il nome del file sul disco.

import androidx.datastore.preferences.preferencesDataStore
import androidx.datastore.preferences.core.Preferences

val Context.dataStore: DataStore<Preferences> by
    preferencesDataStore(name = "settings")

Perché usare un delegate al livello superiore

Il delegate garantisce che nel processo esista esattamente una istanza di DataStore per quel nome di file. Crearne due per lo stesso file genera un errore, perché entrerebbero in conflitto sugli stessi dati.

Dichiararlo come estensione Context al livello superiore fa sì che rimanga un singleton.

Chiavi delle preferenze

Ogni valore necessita di una chiave tipizzata. La chiave assegna un nome alla voce e ne fissa il tipo. Le funzioni helper creano chiavi per ogni tipo supportato.

import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.intPreferencesKey

val USERNAME = stringPreferencesKey("username")
val DARK_MODE = booleanPreferencesKey("dark_mode")
val LAUNCH_COUNT = intPreferencesKey("launch_count")

Tipi di chiave supportati

Preferences DataStore supporta questi tipi primitivi di chiave:

  • stringPreferencesKey
  • booleanPreferencesKey
  • intPreferencesKey, longPreferencesKey, floatPreferencesKey, doublePreferencesKey
  • stringSetPreferencesKey

Definire le chiavi in un unico punto

Un approccio comune consiste nel raccogliere tutte le chiavi in un object, così da trovarle e riutilizzarle facilmente, evitando errori di battitura nei nomi stringa.

object PrefKeys {
    val USERNAME = stringPreferencesKey("username")
    val DARK_MODE = booleanPreferencesKey("dark_mode")
    val FONT_SIZE = intPreferencesKey("font_size")
}

Chiavi stringa e nomi delle variabili

Tenga presente che l'argomento stringa (ad esempio "dark_mode") è ciò che viene scritto sul disco. Se in seguito lo rinomina, i vecchi valori diventano irraggiungibili. Il nome del Kotlin val serve solo nel codice.

Un DataStore per ogni ambito

È possibile creare più DataStore per ambiti diversi, ciascuno con il proprio nome di file, ad esempio un archivio "settings" e uno "user_session". Mantenga insieme le chiavi correlate.

val Context.settingsStore by preferencesDataStore(name = "settings")
val Context.sessionStore by preferencesDataStore(name = "session")

Accedere dal livello dell'interfaccia utente

Sebbene il delegate sia associato a Context, non lo legga direttamente nei Composable. Inietti il DataStore in un repository, quindi esponga i flussi a un ViewModel. In questo modo l'interfaccia utente rimane facilmente testabile.

Una struttura semplice per il repository

Racchiudere DataStore in una classe repository offre un'API pulita e un unico punto in cui definire le chiavi e la logica di mapping.

class SettingsRepository(private val dataStore: DataStore<Preferences>) {
    val darkMode: Flow<Boolean> = dataStore.data
        .map { it[PrefKeys.DARK_MODE] ?: false }
}

Valori predefiniti

Una chiave potrebbe non esistere ancora, quindi le letture restituiscono null. Quando esegue il mapping di un valore delle preferenze, fornisca sempre un valore predefinito con l'operatore Elvis ?:.

val fontSize: Flow<Int> = dataStore.data
    .map { prefs -> prefs[PrefKeys.FONT_SIZE] ?: 14 }

Verifica rapida

Verifichi di aver compreso le chiavi delle preferenze.

Riepilogo

Ha configurato Preferences DataStore:

  • Crei un'unica istanza tramite il delegate preferencesDataStore al livello superiore
  • Definisca chiavi tipizzate con stringPreferencesKey, booleanPreferencesKey e così via
  • Raccolga le chiavi in un object e racchiuda l'accesso in un repository
  • Fornisca sempre valori predefiniti per le chiavi mancanti

Prossimo argomento: leggere e scrivere effettivamente queste impostazioni.

Domande Frequenti

La lezione «Preferences DataStore» è gratuita?

Sì — il testo completo di «Preferences DataStore» è 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 4 lezioni in totale.

Cosa imparerò in «Preferences DataStore»?

Salvi impostazioni chiave-valore in modo reattivo. 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 2 di 4.

Quanto tempo richiede la lezione «Preferences DataStore»?

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. DataStore o SharedPreferences
  2. Preferences DataStore
  3. Leggere e scrivere le impostazioni
  4. Proto DataStore
← Torna a Android Academy