0Pricing
Android Academy · Lección

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 Serializer con un defaultValue
  • 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

  1. DataStore frente a SharedPreferences
  2. Preferences DataStore
  3. Leer y escribir configuraciones
  4. Proto DataStore
← Volver a Android Academy