Android Academy · leksjon

Lese og skrive innstillinger

Lagre og observer brukerpreferanser.

Leksjon 3 av 413 trinn

Lese og skrive innstillinger er en gratis leksjon i Android Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Android Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Android Academy inneholder totalt 4 leksjoner.

Lese og skrive

Når nøklene er definert, er de to kjerneoperasjonene å lese dataflyten og å skrive med edit. Lesinger er reaktive, mens skrivinger er suspend-funksjoner.

Dataflyten

dataStore.data er en Flow<Preferences>. Hver gang De skriver, sender flyten ut et nytt Preferences-øyeblikksbilde, slik at collectors automatisk holdes oppdatert.

val rawData: Flow<Preferences> = dataStore.data

Mappe én enkelt verdi

De vil sjelden ha hele Preferences-objektet. Bruk map til å hente ut én nøkkel og bruke en standardverdi.

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

Håndtere lesefeil

Lesing fra disken kan mislykkes med IOException. Bruk catch før map for å sende ut tomme preferanser og holde flyten i gang.

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

Skrive med edit

For å endre verdier kaller De den suspenderende funksjonen edit. Inne i lambda-uttrykket får De et muterbart preferanseobjekt; angi nøkler på dette. Hele blokken er én transaksjon.

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

edit er en suspend-funksjon

Fordi edit suspenderer, må De kalle den fra en coroutine, vanligvis inne i en ViewModel ved hjelp av viewModelScope.launch. Dette garanterer at skrivingen skjer utenfor hovedtråden.

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

Oppdatere flere nøkler

Én edit-blokk kan angi flere nøkler. De lagres atomisk sammen, slik at observatører aldri ser en delvis oppdatering.

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

Øke en verdi

Inne i edit kan De lese den gjeldende verdien og beregne en ny, noe som er nyttig for tellere som antall oppstarter.

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

Fjerne og tømme

Fjern én enkelt nøkkel med remove, eller tøm lageret med clear. Begge deler gjøres inne i en edit-blokk.

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

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

Samle inn i Compose

I en Composable gjør De ViewModel-flyten om til tilstand med collectAsStateWithLifecycle(). Brukergrensesnittet komponeres på nytt hver gang innstillingen endres.

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

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

En les–endre–skriv-syklus

Slik henger det sammen: UI-et leser via en flow, brukeren slår en innstilling av eller på, ViewModel starter en coroutine som kaller edit, DataStore skriver, flyten sender ut en ny verdi, og UI-et komponeres på nytt. Alt er reaktivt fra ende til annen.

Rask sjekk

Test forståelsen Deres av lesing og skriving.

Oppsummering

De kan nå lese og skrive innstillinger:

  • dataStore.data er en reaktiv Flow<Preferences>
  • map henter ut én enkelt verdi, mens catch håndterer I/O-feil
  • dataStore.edit { } skriver atomisk fra en coroutine
  • collectAsStateWithLifecycle styrer Compose-brukergrensesnittet

Deretter skal De bruke typesikre strukturerte data med Proto DataStore.

Gratis å komme i gang

Lær deg Kotlin med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
36
Leksjoner
152

Ofte stilte spørsmål

Er leksjonen «Lese og skrive innstillinger» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Android Academy, inkludert «Lese og skrive innstillinger», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Android Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Lese og skrive innstillinger»?

Lagre og observer brukerpreferanser. Du øver på Android Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Android Academy?

Ingen tidligere erfaring er nødvendig. Android Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Lese og skrive innstillinger»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Android Academy-leksjonen?

Ja. Alle Android Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. DataStore kontra SharedPreferences
  2. Preferences DataStore
  3. Lese og skrive innstillinger
  4. Proto DataStore
← Tilbake til Android Academy