0Pricing
Android Academy · Lektion

Preferences DataStore

Speichern Sie Schlüssel-Wert-Einstellungen reaktiv.

Preferences DataStore ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.

Preferences DataStore

Preferences DataStore speichert einfache Schlüssel-Wert-Paare – genau wie SharedPreferences, jedoch mit der modernen asynchronen API. Für das gesamte Objekt erzwingt es weder ein Schema noch Typsicherheit.

Sie greifen über typisierte Schlüssel auf Werte zu.

DataStore erstellen

Sie erstellen pro Datei genau eine DataStore-Instanz, indem Sie den Property-Delegate preferencesDataStore auf oberster Ebene einer Kotlin-Datei verwenden. name wird zum Dateinamen auf dem Datenträger.

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

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

Warum ein Delegate auf oberster Ebene

Der Delegate stellt sicher, dass es in Ihrem Prozess für diesen Dateinamen genau eine DataStore-Instanz gibt. Wenn Sie zwei Instanzen für dieselbe Datei erstellen, wird ein Fehler ausgelöst, da sie um dieselben Daten konkurrieren würden.

Wenn Sie ihn als Erweiterung von Context auf oberster Ebene deklarieren, bleibt er ein Singleton.

Preference-Schlüssel

Jeder Wert benötigt einen typisierten Schlüssel. Der Schlüssel benennt den Eintrag und legt zugleich dessen Typ fest. Hilfsfunktionen erstellen Schlüssel für jeden unterstützten Typ.

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

Unterstützte Schlüsseltypen

Preferences DataStore unterstützt diese primitiven Schlüsseltypen:

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

Schlüssel an einer Stelle definieren

Ein gängiges Muster besteht darin, alle Schlüssel in einem object zu sammeln. So lassen sie sich leicht finden und wiederverwenden, und Tippfehler in den String-Namen werden vermieden.

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

String-Schlüssel und Variablennamen

Beachten Sie, dass das String-Argument (z. B. "dark_mode") auf dem Datenträger gespeichert wird. Wenn Sie es später umbenennen, sind alte Werte nicht mehr erreichbar. Der Kotlin-Name von val dient nur in Ihrem Code.

Ein DataStore pro Zuständigkeitsbereich

Sie können mehrere DataStores für unterschiedliche Zuständigkeitsbereiche erstellen, jeweils mit einem eigenen Dateinamen, beispielsweise einen Speicher für "settings" und einen für "user_session". Gruppieren Sie zusammengehörige Schlüssel.

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

Zugriff aus der UI-Schicht

Obwohl der Delegate an Context hängt, sollten Sie ihn nicht direkt in Composables lesen. Injizieren Sie den DataStore in ein Repository und stellen Sie dem ViewModel anschließend Flows bereit. So bleibt die UI testbar.

Aufbau eines einfachen Repositorys

Wenn Sie DataStore in eine Repository-Klasse kapseln, erhalten Sie eine übersichtliche API sowie eine zentrale Stelle zum Definieren von Schlüsseln und Zuordnungslogik.

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

Standardwerte

Ein Schlüssel ist möglicherweise noch nicht vorhanden, daher geben Lesevorgänge null zurück. Geben Sie beim Zuordnen eines Preference-Werts mit dem Elvis-Operator ?: immer einen Standardwert an.

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

Kurze Überprüfung

Testen Sie Ihr Verständnis von Preference-Schlüsseln.

Zusammenfassung

Sie haben Preferences DataStore eingerichtet:

  • Erstellen Sie eine Instanz über den Delegate preferencesDataStore auf oberster Ebene
  • Definieren Sie typisierte Schlüssel mit stringPreferencesKey, booleanPreferencesKey usw.
  • Sammeln Sie Schlüssel in einem object und kapseln Sie den Zugriff in einem Repository
  • Geben Sie für fehlende Schlüssel immer Standardwerte an

Als Nächstes lesen und schreiben Sie diese Einstellungen tatsächlich.

Häufig gestellte Fragen

Ist die Lektion „Preferences DataStore“ kostenlos?

Ja — der vollständige Text von „Preferences DataStore“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Preferences DataStore“?

Speichern Sie Schlüssel-Wert-Einstellungen reaktiv. Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Android Academy zu starten?

Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Preferences DataStore“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?

Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. DataStore oder SharedPreferences
  2. Preferences DataStore
  3. Einstellungen lesen und schreiben
  4. Proto DataStore
← Zurück zu Android Academy