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) { } }) } } 
  • AppCompatActivity, ViewModel y data binding
  • Android Kotlin cómo marcar la checkbox en la vista de list de opciones múltiples
  • Kotlin y Upper Type Bounds con covarianza
  • Javafx by kotlin salió mal cuando lo exporté a un file ejecutable
  • Kotlin JavaScript al file de definición de TypeScript
  • Tipo de security con campos opcionales en una class de datos para JSON
  • ¿Cómo se puede compartir un UUID como key principal en dos tablas usando Hibernate?
  • Cómo condicionar la comprobación como i <J in para loop kotlin
  • ¿Cómo puedo eliminar objects duplicates con distinctBy de una list en Kotlin?
  • Gradle no importará una dependencia bintray, pero no lanza ningún error
  • Kotlin delegando a un futuro