0Pricing
Android Academy · Lezione

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 corso
  • Success(data) — i dati sono disponibili
  • Error(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.VISIBLE e View.GONE
  • GONE rimuove 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 TextInputLayout con la proprietà error per 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.GONE e View.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

  1. Retrofit e API REST
  2. Caricamento di immagini con Coil
  3. Gestione degli errori e UX
  4. Notifiche push
  5. WorkManager e attività in background
  6. Pubblicazione sul Play Store
← Torna a Android Academy