0Pricing
Android Academy · Lección

Leer y escribir configuraciones

Guarde y observe las preferencias del usuario

Leer y escribir configuraciones es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 3 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.

Leer y escribir

Una vez definidas las claves, las dos operaciones principales son la lectura del flujo de datos y la escritura con edit. Las lecturas son reactivas y las escrituras son funciones suspend.

El Flow de datos

dataStore.data es un Flow<Preferences>. Cada vez que escribe, el flujo emite una nueva instantánea de Preferences, por lo que los recolectores se mantienen actualizados automáticamente.

val rawData: Flow<Preferences> = dataStore.data

Mapear un solo valor

Rara vez necesitará el objeto Preferences completo. Use map para extraer una clave y aplicar un valor predeterminado.

val darkMode: Flow<Boolean> = dataStore.data
    .map { prefs -> prefs[PrefKeys.DARK_MODE] ?: false }

Manejar errores de lectura

Las lecturas del disco pueden fallar con IOException. Use catch antes de map para emitir preferencias vacías y mantener activo el flujo.

val darkMode: Flow<Boolean> = dataStore.data
    .catch { e ->
        if (e is IOException) emit(emptyPreferences())
        else throw e
    }
    .map { it[PrefKeys.DARK_MODE] ?: false }

Escribir con edit

Para cambiar valores, llame a la función suspend edit. Dentro de la lambda recibirá un objeto de preferencias mutable; establezca las claves en él. Todo el bloque constituye una única transacción.

suspend fun setDarkMode(enabled: Boolean) {
    dataStore.edit { prefs ->
        prefs[PrefKeys.DARK_MODE] = enabled
    }
}

edit es una función suspend

Como edit se suspende, debe llamarla desde una corrutina, normalmente dentro de un ViewModel mediante viewModelScope.launch. Así se garantiza que la escritura se realice fuera del subproceso principal.

fun toggleDarkMode(value: Boolean) {
    viewModelScope.launch {
        repository.setDarkMode(value)
    }
}

Actualizar varias claves

Un solo bloque edit puede establecer varias claves. Se confirman juntas de forma atómica, por lo que los observadores nunca ven una actualización parcial.

dataStore.edit { prefs ->
    prefs[PrefKeys.USERNAME] = "ada"
    prefs[PrefKeys.DARK_MODE] = true
    prefs[PrefKeys.FONT_SIZE] = 16
}

Incrementar un valor

Dentro de edit puede leer el valor actual y calcular uno nuevo, lo que resulta útil para contadores como el número de ejecuciones.

suspend fun incrementLaunchCount() {
    dataStore.edit { prefs ->
        val current = prefs[PrefKeys.LAUNCH_COUNT] ?: 0
        prefs[PrefKeys.LAUNCH_COUNT] = current + 1
    }
}

Eliminar y borrar

Elimine una sola clave con remove o borre todo el almacén con clear; ambas operaciones deben realizarse dentro de un bloque edit.

dataStore.edit { prefs ->
    prefs.remove(PrefKeys.USERNAME)
}

dataStore.edit { prefs ->
    prefs.clear()
}

Recopilar en Compose

En un Composable, convierta el flujo del ViewModel en estado con collectAsStateWithLifecycle(). La interfaz se recompone cada vez que cambia la preferencia.

val darkMode by viewModel.darkMode.collectAsStateWithLifecycle(initial = false)

Switch(
    checked = darkMode,
    onCheckedChange = { viewModel.toggleDarkMode(it) }
)

Ciclo de lectura, modificación y escritura

En conjunto: la interfaz lee mediante un flujo, el usuario cambia el interruptor, el ViewModel inicia una corrutina que llama a edit, DataStore escribe, el flujo vuelve a emitir y la interfaz se recompone. Todo el proceso es completamente reactivo.

Comprobación rápida

Compruebe su comprensión de la lectura y la escritura.

Resumen

Ahora puede leer y escribir preferencias:

  • dataStore.data es un Flow<Preferences> reactivo
  • map extrae un solo valor y catch gestiona los errores de E/S
  • dataStore.edit { } escribe de forma atómica desde una corrutina
  • collectAsStateWithLifecycle controla la interfaz de Compose

A continuación: datos estructurados y tipados con Proto DataStore.

Preguntas frecuentes

¿La lección «Leer y escribir configuraciones» es gratis?

Sí — el texto completo de «Leer y escribir configuraciones» 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 «Leer y escribir configuraciones»?

Guarde y observe las preferencias del usuario 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 3 de 4.

¿Cuánto tiempo toma la lección «Leer y escribir configuraciones»?

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