NullPointerException en Kotlin

Cuando escribo este código en la actividad de kotlin

var tv: TextView = findViewById(R.id.tv_kotlin) as TextView 

Siempre falla con el siguiente error:

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference 

Y descubro que cuando convierto mis códigos Java en códigos kotlin, el convertidor automático siempre hace esto:

 private var btn: Button? = null 

Y cuando uso la reference, ¡tengo que poner una !! detrás de él, lo que hace que los códigos sean realmente feos. Entonces, ¿cuál es la forma correcta de vincular la IU en Android kotlin?

El código completado:

 class JavaToKotlinActivity : AppCompatActivity() { private var tv: TextView = findViewById(R.id.tv) as TextView private var btn: Button? = null private var et: EditText? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_java_to_kotlin) initView() } private fun initView() { btn = findViewById(R.id.btn) as Button et = findViewById(R.id.et) as EditText btn!!.setOnClickListener { tv.text = "haha" } et!!.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) { } override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { } override fun afterTextChanged(s: Editable) { } }) } } 

Y los posts de error:

 06-09 14:25:38.574 9770-9770/com.mimi E/AndroidRuntime: FATAL EXCEPTION: main Process: com.mimi, PID: 9770 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mimi/com.mimi.Views.JavaToKotlinActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2488) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2643) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1480) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5799) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:913) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:116) at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:147) at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:27) at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:50) at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:29) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:199) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:181) at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:521) at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190) at com.mimi.Views.JavaToKotlinActivity.<init>(JavaToKotlinActivity.kt:20) at java.lang.Class.newInstance(Native Method) at android.app.Instrumentation.newActivity(Instrumentation.java:1072) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2478) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2643) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1480) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5799) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:913) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774) 

Debe enlazar sus vistas después de setContentView(R.layout.activity_java_to_kotlin)

si no quieres usar el tipo que admite nulos:

 private lateinit var tv: TextView 

y en initView()

 tv = findViewById(R.id.tv) as TextView 

Y no te olvides de la rotation de la pantalla.

Puede intentar aplicar el complemento: 'kotlin-android-extensions', puede usar directamente el ID de View

Retire la vista superior de text de su código,

tv privada de var: TextView = findViewById (R.id.tv) como TextView

y debe hacer así.

 class JavaToKotlinActivity : AppCompatActivity() { private var tv: TextView? = null private var btn: Button? = null private var et: EditText? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_java_to_kotlin) initView() } private fun initView() { btn = findViewById(R.id.btn) as Button et = findViewById(R.id.et) as EditText tv = findViewById(R.id.tv) as TextView btn?.setOnClickListener{ tv?.text = "haha" } et?.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) { } override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { } override fun afterTextChanged(s: Editable) { } }) } } 
  • ¿Cómo puedo fusionar una sola <Lista <Lista <T >>> en una Lista <T> con RxJava 2?
  • ¿Por qué esta testing de instrumentación de Android invoca actividad en Crear dos veces?
  • Referencia no resuelta dentro del oyente Kotlin anónimo
  • Asynchronization de reference no resuelta en Kotlin
  • ¿Cómo solucionar este error en la demostración web de Kotlin?
  • Kotlin, el elenco inteligente es imposible debido a la expresión compleja
  • Cuadro de dialog de finalización de Kotlin Ventana emergente después de escribir "object".
  • Android - Comprobar si no nulo no funciona como se esperaba
  • ¿Cómo puedo usar stack en Kotlin?
  • ImageIO No se puede leer el file de input (Kotlin)
  • Cómo declarar una function como una variable en Kotlin