Gestión de errores y UX
Modele los estados de la interfaz con clases sealed (Loading/Success/Error). Muestre ProgressBar, Snackbar con acciones Retry y errores de validación en línea de TextInputLayout.
Gestión de errores y UX es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 3 de 6. 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 6 lecciones en total.
Por qué es importante gestionar los errores
Las aplicaciones que se bloquean o se congelan sin explicación parecen defectuosas. Los usuarios no saben qué ha ocurrido ni qué deben hacer después.
Una buena gestión de errores significa:
- La aplicación se mantiene estable
- Los usuarios reciben un mensaje claro
- Pueden volver a intentarlo o realizar una acción
Esta es la diferencia entre una valoración de 2 estrellas y una de 5 estrellas.
Modelado del estado de la interfaz
Un patrón claro consiste en modelar todos los estados posibles de la interfaz con una sealed class:
Loading— la solicitud está en cursoSuccess(data)— los datos están disponiblesError(message)— algo ha salido mal
El ViewModel emite uno de estos estados y la interfaz lo representa.
Sealed Class UiState
Defina una sealed class para todos los estados posibles:
sealed class UiState<out T> {
object Loading : UiState<Nothing>()
data class Success<T>(val data: T) : UiState<T>()
data class Error(val message: String) : UiState<Nothing>()
}
// In ViewModel:
private val _state = MutableLiveData<UiState<List<Post>>>()
val state: LiveData<UiState<List<Post>>> = _state
fun loadPosts() {
_state.value = UiState.Loading
viewModelScope.launch {
try {
val posts = withContext(Dispatchers.IO) { repo.getPosts() }
_state.value = UiState.Success(posts)
} catch (e: Exception) {
_state.value = UiState.Error(e.message ?: "Unknown error")
}
}
}Representación del estado en la interfaz
Observe el estado y muestre la vista adecuada para cada caso:
viewModel.state.observe(this) { state ->
when (state) {
is UiState.Loading -> {
binding.progressBar.visibility = View.VISIBLE
binding.recyclerView.visibility = View.GONE
binding.tvError.visibility = View.GONE
}
is UiState.Success -> {
binding.progressBar.visibility = View.GONE
binding.recyclerView.visibility = View.VISIBLE
adapter.submitList(state.data)
}
is UiState.Error -> {
binding.progressBar.visibility = View.GONE
binding.tvError.text = state.message
binding.tvError.visibility = View.VISIBLE
}
}
}ProgressBar durante la carga
Muestre una ProgressBar mientras espera los datos:
- Use
android:indeterminate="true"para mostrar un indicador giratorio - Alterne la visibilidad entre
View.VISIBLEyView.GONE GONEelimina la vista del diseño; no solo la hace invisible, sino que además deja de ocupar espacio
Snackbar frente a Toast
Prefiera Snackbar en lugar de Toast para los mensajes de error:
- Snackbar puede incluir un botón de acción, como "Reintentar"
- Está vinculada a la pantalla actual y no flota sobre otras aplicaciones
- Desaparece automáticamente o al tocarla
Snackbar con reintento
Muestre un error con un botón de acción para reintentar:
import com.google.android.material.snackbar.Snackbar
fun showError(message: String) {
Snackbar.make(
binding.root, // root view of the screen
message,
Snackbar.LENGTH_INDEFINITE // stays until dismissed
).setAction("Retry") {
viewModel.loadPosts() // retry the request
}.show()
}Validación de entradas
Valide los datos introducidos por el usuario antes de enviarlos al servidor:
- Use
TextInputLayoutcon la propiedaderrorpara mostrar errores integrados debajo del campo - Compruebe los campos vacíos, el formato del correo electrónico y la longitud de la contraseña antes de llamar a la API
- Borre los errores cuando el usuario empiece a escribir
Error de TextInputLayout
Muestre errores de validación integrados en los campos del formulario:
fun validateAndSubmit() {
val email = binding.etEmail.text.toString().trim()
val password = binding.etPassword.text.toString()
var hasError = false
if (email.isBlank() || !email.contains("@")) {
binding.tilEmail.error = "Enter a valid email"
hasError = true
} else {
binding.tilEmail.error = null // clear error
}
if (password.length < 6) {
binding.tilPassword.error = "Minimum 6 characters"
hasError = true
} else {
binding.tilPassword.error = null
}
if (!hasError) viewModel.login(email, password)
}Comprobación rápida
¿Qué estado de visibilidad de una vista la elimina completamente del diseño, de modo que no ocupa espacio?
Repaso: gestión de errores y UX
Ahora sus aplicaciones pueden gestionar los errores correctamente:
- Modelar el estado como Loading / Success / Error con una sealed class
- Mostrar una ProgressBar durante la carga
- Usar Snackbar con una acción de reintento para los errores de red
- Usar errores integrados de TextInputLayout para validar formularios
View.GONEfrente aView.INVISIBLE: eliminar frente a ocultar
Lección final: publique su aplicación en Play Store.
Preguntas frecuentes
¿La lección «Gestión de errores y UX» es gratis?
Sí — el texto completo de «Gestión de errores y UX» 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 6 lecciones en total.
¿Qué aprenderé en «Gestión de errores y UX»?
Modele los estados de la interfaz con clases sealed (Loading/Success/Error). Muestre ProgressBar, Snackbar con acciones Retry y errores de validación en línea de TextInputLayout. 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 6.
¿Cuánto tiempo toma la lección «Gestión de errores y UX»?
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
- Retrofit y API REST
- Carga de imágenes con Coil
- Gestión de errores y UX
- Notificaciones push
- WorkManager y tareas en segundo plano
- Publicación en Play Store