Gestione degli errori e UX
Modelli gli stati dell'interfaccia con sealed class (Loading/Success/Error). Mostri ProgressBar, Snackbar con azioni Retry ed errori di convalida inline in TextInputLayout.
Gestione degli errori e UX è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 3 di 6. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Android Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Android Academy include 6 lezioni in totale.
Perché la gestione degli errori è importante
Le app che si arrestano o si bloccano senza spiegazioni sembrano difettose. Gli utenti non sanno cosa sia successo né cosa fare dopo.
Una buona gestione degli errori significa:
- L'app rimane stabile
- Gli utenti ricevono un messaggio chiaro
- Possono riprovare o eseguire un'azione
Questa è la differenza tra una recensione da 2 stelle e una da 5 stelle.
Modellazione dello stato dell'interfaccia
Un pattern chiaro consiste nel modellare tutti i possibili stati dell'interfaccia con una sealed class:
Loading— la richiesta è in corsoSuccess(data)— i dati sono disponibiliError(message)— si è verificato un problema
Il ViewModel emette uno di questi stati e l'interfaccia lo visualizza.
Sealed class UiState
Definisca una sealed class per tutti i possibili stati:
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")
}
}
}Visualizzazione dello stato nell'interfaccia
Osservi lo stato e mostri la vista appropriata per ogni 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 il caricamento
Mostri una ProgressBar mentre attende i dati:
- Usi
android:indeterminate="true"per un indicatore di caricamento rotante - Alterni la visibilità tra
View.VISIBLEeView.GONE GONErimuove la vista dal layout (non la rende semplicemente invisibile: non occupa spazio)
Snackbar o Toast
Preferisca Snackbar a Toast per i messaggi di errore:
- La Snackbar può contenere un pulsante di azione, ad esempio "Riprova"
- È associata alla schermata corrente e non rimane sopra le altre app
- Si chiude automaticamente o quando viene toccata
Snackbar con Riprova
Mostri un errore con un pulsante di azione Riprova:
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()
}Convalida dell'input
Convalidi l'input dell'utente prima di inviarlo al server:
- Usi
TextInputLayoutcon la proprietàerrorper mostrare gli errori in linea sotto il campo - Controlli i campi vuoti, il formato dell'email e la lunghezza della password prima di chiamare l'API
- Cancelli gli errori quando l'utente inizia a digitare
Errore di TextInputLayout
Mostri gli errori di convalida in linea nei campi del modulo:
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)
}Verifica rapida
Quale stato di visibilità di una vista la rimuove completamente dal layout, senza occupare spazio?
Riepilogo: gestione degli errori e UX
Ora le sue app possono gestire gli errori con eleganza:
- Modellare lo stato come Loading / Success / Error con una sealed class
- Mostrare una ProgressBar durante il caricamento
- Usare una Snackbar con l'azione Riprova per gli errori di rete
- Usare gli errori in linea di TextInputLayout per la convalida dei moduli
View.GONEeView.INVISIBLE: rimuovere o nascondere
Lezione finale: pubblichi la sua app sul Play Store.
Domande Frequenti
La lezione «Gestione degli errori e UX» è gratuita?
Sì — il testo completo di «Gestione degli errori e UX» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Android Academy, passa a CoddyKit PRO. Il corso Android Academy include 6 lezioni in totale.
Cosa imparerò in «Gestione degli errori e UX»?
Modelli gli stati dell'interfaccia con sealed class (Loading/Success/Error). Mostri ProgressBar, Snackbar con azioni Retry ed errori di convalida inline in TextInputLayout. Eserciti Android Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Android Academy?
Non è richiesta alcuna esperienza precedente. Android Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 6.
Quanto tempo richiede la lezione «Gestione degli errori e UX»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Android Academy?
Sì. Ogni lezione Android Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Retrofit e API REST
- Caricamento di immagini con Coil
- Gestione degli errori e UX
- Notifiche push
- WorkManager e attività in background
- Pubblicazione sul Play Store