Android Academy · Les

Proto DataStore

Sla getypeerde, gestructureerde gegevens op.

Les 4 van 413 stappen

Proto DataStore is een gratis Android Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Android Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Android Academy bevat in totaal 4 lessen.

Proto DataStore

Proto DataStore slaat sterk getypeerde gestructureerde objecten op in plaats van losse sleutel-waardeparen. Je definieert een schema en DataStore slaat één getypeerd object per bestand op.

Dit is ideaal wanneer je instellingen samen een samenhangend model vormen.

Waarom getypeerde gegevens

Preferences DataStore is niet getypeerd: een typefout in een sleutel of het lezen van het verkeerde type mislukt pas tijdens runtime. Proto DataStore biedt typestriktheid tijdens het compileren voor het volledige instellingenobject.

  • Geen tekenreekssleutels waarin je typefouten kunt maken
  • Standaardwaarden die in het schema zijn gedefinieerd
  • Velden die gemakkelijk kunnen worden aangepast tijdens refactoring

Een serialisatie-indeling kiezen

De klassieke aanpak gebruikt Protocol Buffers (proto) om het schema te definiëren. Je kunt ook serialiseren met kotlinx.serialization of een aangepaste indeling. Het schema beschrijft de velden en typen.

Een Proto-schema definiëren

Je schrijft een .proto-bestand waarin je het instellingenbericht beschrijft. De protobuf-compiler genereert daaruit een 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;
}

Een serializer implementeren

DataStore heeft een Serializer nodig die weet hoe je type naar een stream moet worden gelezen en geschreven, plus een defaultValue die wordt gebruikt wanneer het bestand leeg is.

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

De Proto DataStore maken

Gebruik de gedelegeerde eigenschap dataStore (niet preferencesDataStore) en geef de bestandsnaam en je serializer door.

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

Getypeerde gegevens lezen

Leesbewerkingen verlopen via settingsStore.data, maar het type van de flow is nu je model. Geen sleutels en geen typeconversies; je hebt rechtstreeks toegang tot de velden.

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

Schrijven met updateData

Proto DataStore vervangt edit door de opschortbare functie updateData. Je ontvangt het huidige object en retourneert een nieuw object. Met protobuf gebruik je de gegenereerde builder.

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

Onveranderlijke updates

Let op: je wijzigt het bestaande object nooit. Je bouwt een nieuw object en retourneert dat. Deze onveranderlijkheid zorgt ervoor dat updates transactioneel en consistent zijn voor alle waarnemers.

Corruptie afhandelen

Als het opgeslagen bestand onleesbaar wordt, genereert DataStore een CorruptionException. Je kunt een corruptionHandler opgeven die een veilige standaardwaarde retourneert in plaats van de app te laten crashen.

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

Preferences versus Proto

Kies op basis van je behoeften:

  • Preferences: enkele niet-gerelateerde vlaggen, snelle configuratie, geen schema
  • Proto: een gestructureerd instellingenmodel, typestriktheid, gedefinieerde standaardwaarden

Beide delen dezelfde asynchrone, transactionele basis die op Flow is gebaseerd.

Snelle controle

Toets je begrip van Proto DataStore.

Samenvatting

Je hebt geleerd hoe je getypeerde gegevens opslaat met Proto DataStore:

  • Definieer een schema, vaak met Protocol Buffers
  • Implementeer een Serializer met een defaultValue
  • Maak de opslag via de gedelegeerde eigenschap dataStore
  • Lees velden rechtstreeks en schrijf met updateData
  • Handel corruptie af met een handler die een standaardwaarde retourneert

Je hebt de DataStore-cursus voltooid.

Gratis beginnen

Leer Kotlin met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
36
Lessen
152

Veelgestelde vragen

Is de les “Proto DataStore” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Android Academy, waaronder “Proto DataStore”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Android Academy bevat in totaal 4 lessen.

Wat leer ik in “Proto DataStore”?

Sla getypeerde, gestructureerde gegevens op. Je oefent met Android Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Android Academy te beginnen?

Ervaring vooraf is niet nodig. Android Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Proto DataStore”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Android Academy?

Ja. Elke les over Android Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. DataStore versus SharedPreferences
  2. Preferences DataStore
  3. Instellingen lezen en schrijven
  4. Proto DataStore
← Terug naar Android Academy