Android Academy · Lektion

Proto DataStore

Lagra typade strukturerade data.

Lektion 4 av 413 steg

Proto DataStore är en gratis lektion i Android Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Android Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Android Academy innehåller totalt 4 lektioner.

Proto DataStore

Proto DataStore lagrar starkt typade strukturerade objekt i stället för lösa nyckel–värde-par. Ni definierar ett schema och DataStore lagrar ett typat objekt per fil.

Det passar utmärkt när era inställningar bildar en sammanhängande modell.

Varför typade data

Preferences DataStore är otypat: ett stavfel i en nyckel eller läsning med fel typ upptäcks först vid körning. Proto DataStore ger er typsäkerhet vid kompilering för hela inställningsobjektet.

  • Inga strängnycklar att stava fel på
  • Standardvärden definieras i schemat
  • Fält som är enkla att refaktorera

Välja serialiseringsformat

Det klassiska tillvägagångssättet använder Protocol Buffers (proto) för att definiera schemat. Ni kan också serialisera med kotlinx.serialization eller valfritt anpassat format. Schemat beskriver fälten och typerna.

Definiera ett Proto-schema

Ni skriver en .proto-fil som beskriver ert inställningsmeddelande. protobuf-kompilatorn genererar en Kotlin/Java-klass från den.

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

Implementera en Serializer

DataStore behöver en Serializer som vet hur er typ ska läsas och skrivas till en ström, samt ett defaultValue som används när filen är tom.

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

Skapa Proto DataStore

Använd delegaten dataStore (inte preferencesDataStore) och ange filnamnet samt er serializer.

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

Läsa typade data

Läsningar görs via settingsStore.data, men nu är flödets typ er modell. Inga nycklar, ingen typkonvertering – ni kommer bara åt fälten direkt.

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

Skriva med updateData

Proto DataStore ersätter edit med den suspenderbara funktionen updateData. Ni får det aktuella objektet och returnerar ett nytt. Med protobuf använder ni den genererade buildern.

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

Oföränderliga uppdateringar

Observera att ni aldrig ändrar det befintliga objektet; ni bygger och returnerar ett nytt. Det är denna oföränderlighet som gör uppdateringarna transaktionella och konsekventa för alla observatörer.

Hantera korruption

Om den lagrade filen blir oläsbar kastar DataStore ett CorruptionException. Ni kan ange en corruptionHandler som returnerar ett säkert standardvärde i stället för att programmet kraschar.

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

Preferences jämfört med Proto

Välj utifrån era behov:

  • Preferences: några få orelaterade flaggor, snabb konfiguration, inget schema
  • Proto: en strukturerad inställningsmodell, typsäkerhet, definierade standardvärden

Båda bygger på samma asynkrona, transaktionella och Flow-baserade grund.

Snabbtest

Testa er förståelse för Proto DataStore.

Sammanfattning

Ni har lärt er att lagra typade data med Proto DataStore:

  • Definiera ett schema, ofta med Protocol Buffers
  • Implementera en Serializer med ett defaultValue
  • Skapa lagret via delegaten dataStore
  • Läs fält direkt och skriv med updateData
  • Hantera korruption med en handler som returnerar ett standardvärde

Ni har slutfört DataStore-kursen.

Gratis att börja

Lär dig Kotlin med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
36
Lektioner
152

Vanliga frågor

Är lektionen ”Proto DataStore” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Android Academy, inklusive ”Proto DataStore”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Android Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Proto DataStore”?

Lagra typade strukturerade data. Ni övar på Android Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Android Academy?

Du behöver inga förkunskaper. Utbildningen i Android Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Proto DataStore”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Android Academy-lektionen?

Ja. Varje Android Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. DataStore kontra SharedPreferences
  2. Preferences DataStore
  3. Läsa och skriva inställningar
  4. Proto DataStore
← Tillbaka till Android Academy