Aplikasi Force Close? Cara Mengatasi NullPointerException Kotlin Android

Aplikasi force close karena NullPointerException hampir selalu berarti kode membaca objek yang ternyata null. Perbaikan tercepat yang aman: temukan baris dari Logcat, lalu ganti !! dengan ?. plus ?: return. Artikel ini memakai konteks Kotlin dengan View/XML, bukan Compose.

Penyebab NullPointerException Paling Sering di Android

Kotlin murni melarang null pada tipe non-null. NPE muncul ketika nilai datang dari Java atau Android API sebagai platform type, misalnya Intent.getStringExtra(), Bundle, atau view yang belum ada.

  • Memakai !! pada nilai nullable yang ternyata null.
  • Mengakses lateinit var sebelum diinisialisasi.
  • findViewById memakai ID yang salah atau dipanggil sebelum setContentView.
  • Mengakses view Fragment setelah onDestroyView.
  • Membaca intent extra atau Fragment arguments yang tidak dikirim.

Tabel Cek Cepat NullPointerException

Buka Logcat, cari baris Caused by: java.lang.NullPointerException, lalu lihat nama file dan nomor baris di bawahnya. Baris itu menunjukkan objek null yang dipanggil.

Masalah Penyebab Solusi
Crash di textView.text = name!! name null Ganti dengan ?. dan ?:
Crash lateinit property not initialized Diakses terlalu cepat Cek ::prop.isInitialized
findViewById null ID salah atau layout belum dipasang Periksa ID dan urutan setContentView
Crash di Fragment View sudah dihancurkan Akses view hanya di rentang view lifecycle
Intent extra null Key tidak dikirim Pakai default atau validasi null
  • Crash terjadi setelah rotasi layar atau kembali dari background.
  • Crash hanya muncul di Fragment, bukan Activity.
  • Crash muncul pada klik pertama sebelum data dimuat.

Langkah Memperbaiki NullPointerException di Kotlin

Ikuti urutan ini agar perbaikan tidak menutup bug lain:

  1. Reproduksi crash dan catat file serta nomor baris dari Logcat.
  2. Ubah variabel berisiko menjadi nullable eksplisit, contoh String?.
  3. Ganti !! dengan safe call ?., Elvis ?:, atau let.
  4. Untuk lateinit, cek isInitialized atau pindah ke lazy bila nilainya dihitung sekali.
  5. Untuk Activity dan Fragment, pastikan view, arguments, dan intent tersedia sesuai lifecycle sebelum dipakai.
val nama = intent.getStringExtra("nama") ?: return
textView?.text = nama

intent.getStringExtra("nama")?.let { value ->
    textView.text = value
}

if (!::adapter.isInitialized) return

FAQ

Apakah !! boleh dipakai untuk mengatasi NPE?

Tidak, !! memaksa akses null dan justru memicu crash baru.

Kenapa findViewById atau viewBinding mengembalikan null?

Umumnya ID salah, layout belum dipasang, atau view Fragment sudah dihancurkan.

Kapan memakai lateinit, nullable, atau lazy agar tidak NPE?

Pakai lateinit untuk properti pasti diisi sebelum dipakai, nullable untuk data boleh kosong, dan lazy untuk nilai dihitung sekali saat pertama diakses.