0Pricing
Android Academy · Lezione

Leggere e scrivere le impostazioni

Salvi e osservi le preferenze dell'utente.

Leggere e scrivere le impostazioni è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 3 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.

Lettura e scrittura

Dopo aver definito le chiavi, le due operazioni fondamentali sono la lettura del flusso di dati e la scrittura con edit. Le letture sono reattive, mentre le scritture sono funzioni suspend.

Il Flow dei dati

dataStore.data è un Flow<Preferences>. Ogni volta che si esegue una scrittura, il flusso emette una nuova istantanea Preferences, così i collector rimangono automaticamente aggiornati.

val rawData: Flow<Preferences> = dataStore.data

Eseguire il mapping di un singolo valore

Raramente serve l'intero oggetto Preferences. Usi map per estrarre una chiave e applicare un valore predefinito.

val darkMode: Flow<Boolean> = dataStore.data
    .map { prefs -> prefs[PrefKeys.DARK_MODE] ?: false }

Gestire gli errori di lettura

Le letture dal disco possono fallire con IOException. Usi catch prima di map per emettere preferenze vuote e mantenere attivo il flusso.

val darkMode: Flow<Boolean> = dataStore.data
    .catch { e ->
        if (e is IOException) emit(emptyPreferences())
        else throw e
    }
    .map { it[PrefKeys.DARK_MODE] ?: false }

Scrivere con edit

Per modificare i valori, chiami la funzione suspend edit. All'interno della lambda riceve un oggetto delle preferenze modificabile; imposti le chiavi su di esso. L'intero blocco costituisce una transazione.

suspend fun setDarkMode(enabled: Boolean) {
    dataStore.edit { prefs ->
        prefs[PrefKeys.DARK_MODE] = enabled
    }
}

edit è una funzione suspend

Poiché edit è una funzione sospensiva, deve chiamarla da una coroutine, in genere all'interno di un ViewModel usando viewModelScope.launch. In questo modo la scrittura viene eseguita al di fuori del thread principale.

fun toggleDarkMode(value: Boolean) {
    viewModelScope.launch {
        repository.setDarkMode(value)
    }
}

Aggiornare più chiavi

Un singolo blocco edit può impostare diverse chiavi. Vengono salvate insieme in modo atomico, quindi gli osservatori non vedono mai un aggiornamento parziale.

dataStore.edit { prefs ->
    prefs[PrefKeys.USERNAME] = "ada"
    prefs[PrefKeys.DARK_MODE] = true
    prefs[PrefKeys.FONT_SIZE] = 16
}

Incrementare un valore

All'interno di edit è possibile leggere il valore corrente e calcolarne uno nuovo, una soluzione utile per contatori come il numero di avvii.

suspend fun incrementLaunchCount() {
    dataStore.edit { prefs ->
        val current = prefs[PrefKeys.LAUNCH_COUNT] ?: 0
        prefs[PrefKeys.LAUNCH_COUNT] = current + 1
    }
}

Rimuovere e cancellare

Rimuova una singola chiave con remove oppure cancelli l'archivio con clear, in entrambi i casi all'interno di un blocco edit.

dataStore.edit { prefs ->
    prefs.remove(PrefKeys.USERNAME)
}

dataStore.edit { prefs ->
    prefs.clear()
}

Eseguire la raccolta in Compose

In un Composable, trasformi il flusso del ViewModel in stato con collectAsStateWithLifecycle(). L'interfaccia utente viene ricomposta ogni volta che l'impostazione cambia.

val darkMode by viewModel.darkMode.collectAsStateWithLifecycle(initial = false)

Switch(
    checked = darkMode,
    onCheckedChange = { viewModel.toggleDarkMode(it) }
)

Un ciclo di lettura-modifica-scrittura

Riunendo tutti i passaggi: l'interfaccia utente legge tramite un flusso, l'utente attiva o disattiva l'opzione, il ViewModel avvia una coroutine che chiama edit, DataStore scrive, il flusso emette nuovamente un valore e l'interfaccia utente viene ricomposta. Il processo è completamente reattivo dall'inizio alla fine.

Verifica rapida

Verifichi di aver compreso la lettura e la scrittura.

Riepilogo

Ora sa leggere e scrivere le impostazioni:

  • dataStore.data è un Flow<Preferences> reattivo
  • map estrae un singolo valore, mentre catch gestisce gli errori di I/O
  • dataStore.edit { } esegue scritture atomiche da una coroutine
  • collectAsStateWithLifecycle alimenta l'interfaccia Compose

Prossimo argomento: dati strutturati tipizzati con Proto DataStore.

Domande Frequenti

La lezione «Leggere e scrivere le impostazioni» è gratuita?

Sì — il testo completo di «Leggere e scrivere le impostazioni» è 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 «Leggere e scrivere le impostazioni»?

Salvi e osservi le preferenze dell'utente. 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 3 di 4.

Quanto tempo richiede la lezione «Leggere e scrivere le impostazioni»?

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