0Pricing
Android Academy · Lektion

Proto DataStore

Speichern Sie typisierte strukturierte Daten.

Proto DataStore ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Proto DataStore

Proto DataStore speichert stark typisierte strukturierte Objekte statt unverbundener Schlüssel-Wert-Paare. Sie definieren ein Schema, und DataStore speichert ein typisiertes Objekt pro Datei.

Es eignet sich ideal, wenn Ihre Einstellungen ein zusammenhängendes Modell bilden.

Warum typisierte Daten

Preferences DataStore ist nicht typisiert: Ein Tippfehler in einem Schlüssel oder das Lesen des falschen Typs schlägt erst zur Laufzeit fehl. Proto DataStore bietet Typsicherheit zur Compile-Zeit für das gesamte Einstellungsobjekt.

  • Keine String-Schlüssel, bei denen Tippfehler möglich sind
  • Im Schema definierte Standardwerte
  • Refactoring-freundliche Felder

Ein Serialisierungsformat auswählen

Der klassische Ansatz verwendet Protocol Buffers (proto), um das Schema zu definieren. Sie können auch mit kotlinx.serialization oder einem beliebigen benutzerdefinierten Format serialisieren. Das Schema beschreibt die Felder und Typen.

Ein Proto-Schema definieren

Sie schreiben eine .proto-Datei, die Ihre Einstellungsnachricht beschreibt. Der protobuf-Compiler generiert daraus eine Kotlin-/Java-Klasse.

syntax = "proto3";

option java_package = "com.example.app";
option java_multiple_files = true;

message UserSettings {
  bool dark_mode = 1;
  int32 font_size = 2;
  string username = 3;
}

Einen Serializer implementieren

DataStore benötigt einen Serializer, der weiß, wie Ihr Typ aus einem Stream gelesen und in einen Stream geschrieben wird, sowie einen defaultValue, der verwendet wird, wenn die Datei leer ist.

object UserSettingsSerializer : Serializer<UserSettings> {
    override val defaultValue: UserSettings = UserSettings.getDefaultInstance()

    override suspend fun readFrom(input: InputStream): UserSettings =
        UserSettings.parseFrom(input)

    override suspend fun writeTo(t: UserSettings, output: OutputStream) =
        t.writeTo(output)
}

Proto DataStore erstellen

Verwenden Sie den Delegate dataStore (nicht preferencesDataStore) und übergeben Sie den Dateinamen sowie Ihren Serializer.

val Context.settingsStore: DataStore<UserSettings> by dataStore(
    fileName = "user_settings.pb",
    serializer = UserSettingsSerializer
)

Typisierte Daten lesen

Lesevorgänge erfolgen über settingsStore.data, aber der Flow-Typ ist jetzt Ihr Modell. Keine Schlüssel, keine Typumwandlungen – greifen Sie einfach direkt auf die Felder zu.

val darkMode: Flow<Boolean> = context.settingsStore.data
    .map { settings -> settings.darkMode }

Mit updateData schreiben

Proto DataStore ersetzt edit durch die suspendierbare Funktion updateData. Sie erhalten das aktuelle Objekt und geben ein neues zurück. Bei protobuf verwenden Sie den generierten Builder.

suspend fun setDarkMode(enabled: Boolean) {
    context.settingsStore.updateData { current ->
        current.toBuilder()
            .setDarkMode(enabled)
            .build()
    }
}

Unveränderliche Aktualisierungen

Beachten Sie, dass Sie das vorhandene Objekt niemals verändern, sondern ein neues erstellen und zurückgeben. Diese Unveränderlichkeit sorgt dafür, dass Aktualisierungen transaktional sind und bei allen Beobachtern konsistent bleiben.

Datenbeschädigung behandeln

Wenn die gespeicherte Datei nicht mehr gelesen werden kann, löst DataStore eine CorruptionException aus. Sie können einen corruptionHandler angeben, der statt eines Absturzes einen sicheren Standardwert zurückgibt.

val Context.settingsStore by dataStore(
    fileName = "user_settings.pb",
    serializer = UserSettingsSerializer,
    corruptionHandler = ReplaceFileCorruptionHandler {
        UserSettings.getDefaultInstance()
    }
)

Preferences oder Proto

Treffen Sie die Wahl entsprechend Ihren Anforderungen:

  • Preferences: einige voneinander unabhängige Flags, schnelle Einrichtung, kein Schema
  • Proto: ein strukturiertes Einstellungsmodell, Typsicherheit, definierte Standardwerte

Beide basieren auf derselben asynchronen, transaktionalen Grundlage mit Flows.

Kurze Überprüfung

Testen Sie Ihr Verständnis von Proto DataStore.

Zusammenfassung

Sie haben gelernt, typisierte Daten mit Proto DataStore zu speichern:

  • Definieren Sie ein Schema, häufig mit Protocol Buffers
  • Implementieren Sie einen Serializer mit einem defaultValue
  • Erstellen Sie den Speicher über den Delegate dataStore
  • Lesen Sie Felder direkt und schreiben Sie mit updateData
  • Behandeln Sie Datenbeschädigungen mit einem Handler, der einen Standardwert zurückgibt

Sie haben den DataStore-Kurs abgeschlossen.

Häufig gestellte Fragen

Ist die Lektion „Proto DataStore“ kostenlos?

Ja — der vollständige Text von „Proto 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 „Proto DataStore“?

Speichern Sie typisierte strukturierte Daten. 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 4 von 4.

Wie lange dauert die Lektion „Proto 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