Android Academy · Lektion

Preferences DataStore

Gem key-value-indstillinger reaktivt.

Lektion 2 af 413 trin

Preferences DataStore er en gratis Android Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Android Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Android Academy-kurset indeholder 4 lektioner i alt.

Preferences DataStore

Preferences DataStore gemmer simple nøgleværdi-par, ligesom SharedPreferences, men med den moderne asynkrone API. Den håndhæver ikke et skema eller typesikkerhed for hele objektet.

Du får adgang til værdier gennem typede nøgler.

Oprettelse af DataStore

Du opretter én DataStore-instans pr. fil ved hjælp af egenskabsdelegaten preferencesDataStore på øverste niveau i en Kotlin-fil. name bliver filnavnet på disken.

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

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

Hvorfor en delegeret på øverste niveau

Delegaten sikrer, at der findes præcis én DataStore-instans for det filnavn i din proces. Hvis du opretter to til den samme fil, udløses en fejl, fordi de ville konkurrere om de samme data.

Hvis du erklærer den som en udvidelse af Context på øverste niveau, forbliver den en singleton.

Præference-nøgler

Hver værdi skal have en typed nøgle. Nøglen navngiver både posten og fastlægger dens type. Hjælpefunktioner opretter nøgler til hver understøttet type.

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")

Understøttede nøgletyper

Preferences DataStore understøtter disse primitive nøgletyper:

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

Definér nøgler ét sted

Et almindeligt mønster er at samle alle nøgler i et object, så de er nemme at finde og genbruge, og så du undgår slåfejl i strengenes navne.

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

Strengnøgler kontra variabelnavne

Husk, at argumentet string (f.eks. "dark_mode") er det, der skrives til disken. Hvis du senere omdøber det, bliver gamle værdier utilgængelige. Kotlin-val-navnet er kun til din kode.

Én DataStore pr. ansvarsområde

Du kan oprette flere DataStore-instanser til forskellige ansvarsområder, hver med sit eget filnavn, for eksempel et "settings"-lager og et "user_session"-lager. Hold relaterede nøgler samlet.

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

Adgang fra brugerfladelaget

Selvom delegaten er knyttet til Context, bør du ikke læse den direkte i Composables. Injicér DataStore i et repository, og eksponér derefter flows til en ViewModel. Det gør brugerfladen nemmere at teste.

En enkel repository-struktur

Hvis du indpakker DataStore i en repository-klasse, får du en ren API og ét samlet sted til at definere nøgler og tilknytningslogik.

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

Standardværdier

En nøgle findes muligvis endnu ikke, så læsninger returnerer null. Angiv altid en standardværdi med Elvis-operatoren ?:, når du knytter en præferenceværdi.

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

Hurtigt tjek

Test din forståelse af præference-nøgler.

Opsummering

Du har konfigureret Preferences DataStore:

  • Opret én instans via delegaten preferencesDataStore på øverste niveau
  • Definér typede nøgler med stringPreferencesKey, booleanPreferencesKey osv.
  • Saml nøglerne i et object, og indpak adgangen i et repository
  • Angiv altid standardværdier for manglende nøgler

Næste trin er faktisk at læse og skrive disse indstillinger.

Gratis at komme i gang

Lær Kotlin med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
36
Lektioner
152

Ofte stillede spørgsmål

Er lektionen “Preferences DataStore” gratis?

Ja — alle 3 lektioner i læringssporet Android Academy, inklusive “Preferences DataStore”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Android Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Preferences DataStore”?

Gem key-value-indstillinger reaktivt. Du øver dig i Android Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Android Academy?

Der kræves ingen tidligere erfaring. Android Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Preferences DataStore”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Android Academy-lektion?

Ja. Alle Android Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. DataStore kontra SharedPreferences
  2. Preferences DataStore
  3. Læsning og skrivning af indstillinger
  4. Proto DataStore
← Tilbage til Android Academy