Proto DataStore
Lagra typade strukturerade data.
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
Serializermed ettdefaultValue - 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.
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.