If you’re developing an Android app using Kotlin and encounter the dreaded kotlin.UninitializedPropertyAccessException: lateinit property ... has not been initialized
, this guide will help you solve it with clear code examples and proper explanation. This error usually occurs when you declare a property using lateinit
but forget to initialize it before accessing it. Here’s how to avoid and fix it in Android Studio.

1. What is lateinit
in Kotlin?
The lateinit
modifier in Kotlin is used to tell the compiler that a variable will be initialized later. It’s commonly used for non-null properties that are initialized after the object is created, such as in Activity
or Fragment
classes in Android.
private lateinit var myTextView: TextView
This allows you to avoid initializing it during declaration, but be careful — using it without proper initialization will crash the app.
2. The Error Explained
Error Message:
kotlin.UninitializedPropertyAccessException: lateinit property myTextView has not been initialized
Cause:
You are trying to access a lateinit
variable before it has been assigned a value.
3. How to Fix It
Solution 1: Initialize Before Use
Make sure you are initializing the lateinit
property in the appropriate lifecycle method.
MainActivity.kt:
class MainActivity : AppCompatActivity() { private lateinit var myTextView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // ✅ Correct initialization myTextView = findViewById(R.id.textView) myTextView.text = "Hello, Kotlin!" } }
Solution 2: Use ::
to Check Initialization
Kotlin provides a way to check whether a lateinit
variable has been initialized:
if (::myTextView.isInitialized) { myTextView.text = "Initialized" } else { Log.d("MainActivity", "TextView is not initialized yet.") }
Solution 3: Avoid lateinit
When Not Needed
If possible, consider using nullable types (TextView?
) or lazy
initialization if the variable doesn’t need to be reassigned:
private val myTextView by lazy { findViewById<TextView>(R.id.textView) }
4. Best Practices
- Only use
lateinit
when you’re 100% sure it will be initialized before any access. - Prefer
lazy
for single-assignment properties. - Use
::variable.isInitialized
to check before accessing.
5. Bonus: Full Example with Proper Use
MainActivity.kt:
class MainActivity : AppCompatActivity() { private lateinit var myButton: Button private lateinit var myTextView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) myButton = findViewById(R.id.button) myTextView = findViewById(R.id.textView) myButton.setOnClickListener { if (::myTextView.isInitialized) { myTextView.text = "Button clicked!" } } } }
6. Additional Resource
You can also learn more from the Kotlin official documentation on lateinit.