Preferences DataStore
Gem key-value-indstillinger reaktivt.
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:
stringPreferencesKeybooleanPreferencesKeyintPreferencesKey,longPreferencesKey,floatPreferencesKey,doublePreferencesKeystringSetPreferencesKey
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
preferencesDataStorepå øverste niveau - Definér typede nøgler med
stringPreferencesKey,booleanPreferencesKeyosv. - 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.
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
- DataStore kontra SharedPreferences
- Preferences DataStore
- Læsning og skrivning af indstillinger
- Proto DataStore