Proto DataStore
Almacene datos estructurados y tipados
Proto DataStore es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.
Proto DataStore
Proto DataStore almacena objetos estructurados y fuertemente tipados en lugar de pares de clave-valor sin estructura. Debe definir un esquema, y DataStore almacena un objeto tipado por archivo.
Es ideal cuando sus preferencias forman un modelo coherente.
Por qué usar datos tipados
Preferences DataStore no está tipado: un error tipográfico en una clave o la lectura con el tipo equivocado solo falla en tiempo de ejecución. Proto DataStore proporciona seguridad de tipos en tiempo de compilación para todo el objeto de preferencias.
- No hay claves de cadena en las que pueda equivocarse al escribir
- Los valores predeterminados se definen en el esquema
- Los campos se pueden refactorizar fácilmente
Elegir un formato de serialización
El enfoque clásico utiliza Protocol Buffers (proto) para definir el esquema. También puede serializar con kotlinx.serialization o con cualquier formato personalizado. El esquema describe los campos y sus tipos.
Definir un esquema Proto
Debe escribir un archivo .proto que describa el mensaje de sus preferencias. El compilador de protobuf genera una clase de Kotlin/Java a partir de él.
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;
}Implementar un serializador
DataStore necesita un Serializer que sepa leer y escribir su tipo en un flujo, además de un defaultValue que se use cuando el archivo esté vacío.
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)
}Crear el Proto DataStore
Use el delegado dataStore (no preferencesDataStore) y proporcione el nombre del archivo y su serializador.
val Context.settingsStore: DataStore<UserSettings> by dataStore(
fileName = "user_settings.pb",
serializer = UserSettingsSerializer
)Leer datos tipados
Las lecturas se realizan mediante settingsStore.data, pero ahora el tipo del flujo es su modelo. No hay claves ni conversiones de tipos; solo tiene que acceder directamente a los campos.
val darkMode: Flow<Boolean> = context.settingsStore.data
.map { settings -> settings.darkMode }Escribir con updateData
Proto DataStore sustituye edit por la función suspend updateData. Recibe el objeto actual y devuelve uno nuevo. Con protobuf se usa el builder generado.
suspend fun setDarkMode(enabled: Boolean) {
context.settingsStore.updateData { current ->
current.toBuilder()
.setDarkMode(enabled)
.build()
}
}Actualizaciones inmutables
Observe que nunca modifica el objeto existente; crea y devuelve uno nuevo. Esta inmutabilidad es lo que hace que las actualizaciones sean transaccionales y coherentes para todos los observadores.
Manejar la corrupción
Si el archivo almacenado deja de poder leerse, DataStore lanza una CorruptionException. Puede proporcionar un corruptionHandler que devuelva un valor predeterminado seguro en lugar de provocar un error.
val Context.settingsStore by dataStore(
fileName = "user_settings.pb",
serializer = UserSettingsSerializer,
corruptionHandler = ReplaceFileCorruptionHandler {
UserSettings.getDefaultInstance()
}
)Preferences frente a Proto
Elija según sus necesidades:
- Preferences: unos pocos indicadores independientes, configuración rápida y sin esquema
- Proto: un modelo de preferencias estructurado, seguridad de tipos y valores predeterminados definidos
Ambos comparten la misma base asíncrona y transaccional basada en Flow.
Comprobación rápida
Compruebe su comprensión de Proto DataStore.
Resumen
Ha aprendido a almacenar datos tipados con Proto DataStore:
- Definir un esquema, normalmente con Protocol Buffers
- Implementar un
Serializercon undefaultValue - Crear el almacén mediante el delegado
dataStore - Leer los campos directamente y escribir con
updateData - Manejar la corrupción con un controlador que devuelva un valor predeterminado
Ha terminado el curso de DataStore.
Preguntas frecuentes
¿La lección «Proto DataStore» es gratis?
Sí — el texto completo de «Proto DataStore» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Proto DataStore»?
Almacene datos estructurados y tipados Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Android Academy?
No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Proto DataStore»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Android Academy?
Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- DataStore frente a SharedPreferences
- Preferences DataStore
- Leer y escribir configuraciones
- Proto DataStore