Penanganan Error & UX
Modelkan status antarmuka dengan kelas sealed (Loading/Success/Error). Tampilkan ProgressBar, Snackbar dengan tindakan Retry, serta error validasi TextInputLayout secara langsung.
Penanganan Error & UX adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 6. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 6 pelajaran total.
Mengapa Penanganan Kesalahan Penting
Aplikasi yang berhenti atau macet tanpa penjelasan akan terasa rusak. Pengguna tidak tahu apa yang terjadi atau apa yang harus dilakukan selanjutnya.
Penanganan kesalahan yang baik berarti:
- Aplikasi tetap stabil
- Pengguna mendapatkan pesan yang jelas
- Pengguna dapat mencoba lagi atau mengambil tindakan
Inilah perbedaan antara ulasan aplikasi bintang 2 dan bintang 5.
Memodelkan Status UI
Pola yang rapi: modelkan semua status UI yang mungkin dengan kelas tersegel:
Loading— permintaan sedang diprosesSuccess(data)— data tersediaError(message)— terjadi kesalahan
ViewModel memancarkan salah satu status ini, lalu UI merendernya.
Kelas Tersegel UiState
Definisikan kelas tersegel untuk semua status yang mungkin:
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")
}
}
}Merender Status di UI
Amati status tersebut dan tampilkan tampilan yang sesuai untuk setiap kasus:
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 untuk Pemuatan
Tampilkan ProgressBar saat menunggu data:
- Gunakan
android:indeterminate="true"untuk indikator pemuatan yang berputar - Alihkan visibilitas antara
View.VISIBLEdanView.GONE GONEmenghapus tampilan dari tata letak (bukan sekadar tidak terlihat — tampilan tersebut tidak memakan ruang)
Snackbar vs Toast
Lebih baik gunakan Snackbar daripada Toast untuk pesan kesalahan:
- Snackbar dapat memiliki tombol tindakan (misalnya "Coba lagi")
- Snackbar melekat pada layar saat ini — tidak mengambang di atas aplikasi lain
- Snackbar tertutup secara otomatis atau saat diketuk
Snackbar dengan Coba Lagi
Tampilkan kesalahan dengan tombol tindakan Coba lagi:
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()
}Validasi Input
Validasi input pengguna sebelum mengirimkannya ke server:
- Gunakan
TextInputLayoutdengan propertierroruntuk menampilkan kesalahan langsung di bawah bidang - Periksa bidang kosong, format email, dan panjang kata sandi sebelum memanggil API
- Hapus kesalahan saat pengguna mulai mengetik
Kesalahan TextInputLayout
Tampilkan kesalahan validasi langsung pada bidang formulir:
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)
}Pemeriksaan Singkat
Status visibilitas tampilan mana yang menghapus tampilan sepenuhnya dari tata letak (tidak memakan ruang)?
Ringkasan: Penanganan Kesalahan & UX
Sekarang aplikasi Anda dapat menangani kesalahan dengan baik:
- Modelkan status sebagai Loading / Success / Error dengan kelas tersegel
- Tampilkan ProgressBar selama pemuatan
- Gunakan Snackbar dengan tindakan Coba lagi untuk kesalahan jaringan
- Gunakan kesalahan langsung TextInputLayout untuk validasi formulir
View.GONEvsView.INVISIBLE— hapus vs sembunyikan
Pelajaran terakhir: publikasikan aplikasi Anda ke Play Store!
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penanganan Error & UX” gratis?
Ya — teks lengkap “Penanganan Error & UX” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 6 pelajaran total.
Apa yang akan aku pelajari di “Penanganan Error & UX”?
Modelkan status antarmuka dengan kelas sealed (Loading/Success/Error). Tampilkan ProgressBar, Snackbar dengan tindakan Retry, serta error validasi TextInputLayout secara langsung. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Android Academy?
Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 6.
Berapa lama pelajaran “Penanganan Error & UX” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Retrofit & API REST
- Memuat Gambar dengan Coil
- Penanganan Error & UX
- Notifikasi Push
- WorkManager & Tugas Latar Belakang
- Menerbitkan ke Play Store