Accidentes de aplicaciones de cronómetro Android

Así que tengo este cronómetro, pero cuando abro su actividad, esto es lo que obtengo:

FATAL EXCEPTION: main Process: com.reecreate.woderator2, PID: 5869 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.reecreate.woderator2/com.reecreate.woderator2.Controller.StopwatchActivity}: kotlin.UninitializedPropertyAccessException: lateinit property textView has not been initialized at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Caused by: kotlin.UninitializedPropertyAccessException: lateinit property textView has not been initialized at com.reecreate.woderator2.Controller.StopwatchActivity.onCreate(StopwatchActivity.kt:52) at android.app.Activity.performCreate(Activity.java:6679) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

Este es mi código:

 class StopwatchActivity : AppCompatActivity() { lateinit var textView: TextView lateinit var start: Button lateinit var pause: Button lateinit var reset: Button lateinit var lap: Button var MillisecondTime: Long = 0 var StartTime:Long = 0 var TimeBuff:Long = 0 var UpdateTime = 0L lateinit var handler: Handler var Seconds: Int = 0 var Minutes:Int = 0 var MilliSeconds:Int = 0 lateinit var listView: ListView var ListElements = arrayOf<String>() lateinit var ListElementsArrayList: MutableList<String> lateinit var adapter: ArrayAdapter<String> override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_stopwatch) textView = textView as TextView start = button as Button pause = button2 as Button reset = button3 as Button lap = button4 as Button listView = listview1 as ListView handler = Handler() ListElementsArrayList = ArrayList(Arrays.asList(*ListElements)) adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, ListElementsArrayList ) listView.adapter = adapter start.setOnClickListener { StartTime = SystemClock.uptimeMillis() handler.postDelayed(runnable, 0) reset.setEnabled(false) } pause.setOnClickListener(View.OnClickListener { TimeBuff += MillisecondTime handler.removeCallbacks(runnable) reset.setEnabled(true) }) reset.setOnClickListener(View.OnClickListener { MillisecondTime = 0L StartTime = 0L TimeBuff = 0L UpdateTime = 0L Seconds = 0 Minutes = 0 MilliSeconds = 0 textView.text = "00:00:00" ListElementsArrayList.clear() adapter.notifyDataSetChanged() }) lap.setOnClickListener(View.OnClickListener { ListElementsArrayList.add(textView.text.toString()) adapter.notifyDataSetChanged() }) } var runnable: Runnable = object : Runnable { override fun run() { MillisecondTime = SystemClock.uptimeMillis() - StartTime UpdateTime = TimeBuff + MillisecondTime Seconds = (UpdateTime / 1000).toInt() Minutes = Seconds / 60 Seconds = Seconds % 60 MilliSeconds = (UpdateTime % 1000).toInt() textView.text = ("" + Minutes + ":" + String.format("%02d", Seconds) + ":" + String.format("%03d", MilliSeconds)) handler.postDelayed(this, 0) } } } 

Traté de ver exactamente cuál era el problema con mi textView, pero no vi nada que pudiera darle un problema. Lo copio en privado, inicializo y todo eso, pero no sé

Cualquier ayuda será muy apreciada 🙂

Gracias

XML:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.reecreate.woderator2.Controller.StopwatchActivity" tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteY="25dp"> <TextView android:text="00:00:00" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView" android:textSize="50dp" android:textStyle="bold" android:textColor="#009688" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> <Button android:text="Start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="41dp" android:id="@+id/button" /> <Button android:text="Pause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:layout_alignBaseline="@+id/button" android:layout_alignBottom="@+id/button" android:layout_centerHorizontal="true" /> <Button android:text="Reset" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/button2" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:id="@+id/button3" /> <Button android:text="Save Lap" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:id="@+id/button4" android:layout_below="@+id/button" android:layout_centerHorizontal="true" /> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/button4" android:layout_centerHorizontal="true" android:layout_marginTop="12dp" android:id="@+id/listview1"/> </RelativeLayout> 

Parece que estás usando las extensiones de Kotlin para Android. En este caso, no tiene que crear las lateinit var para sus Vistas, solo puede referirse a sus ID en el file XML.

Entonces en vez de esto:

 class StopwatchActivity : AppCompatActivity() { lateinit var textView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_stopwatch) textView = textView as TextView textView.text = "00:00:00" } } 

Solo haz esto:

 class StopwatchActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_stopwatch) textView.text = "00:00:00" } } 

Y lo mismo con todas tus otras Vistas.

Para ver otras opciones además de las extensiones de Kotlin para Android, consulte esta discusión .

  • Kotlin: ¿cómo devolver la instancia del service en ejecución en la carpeta?
  • ¿Por qué no puedo usar @PublishedApi en typealias?
  • GSON no puede deserializar la class Kotlin con getter personalizado
  • Interfaz nativa Kotlin
  • Error al detectar exception en la llamada asíncrona Anko (Kotlin)
  • Tipo de valor de par universal para extras de bash
  • Cómo configurar el reempaquetado de los botines de spring con gradle-script-kotlin
  • Las dependencies de Bintray no se downloadán en InteliJ
  • Función de extensión Kotlin: reference no resuelta
  • Forma idiomática de secuencia dertwigda en tres lists usando Kotlin
  • Los elementos de vista de Android NavigationView Headerlayout no están activando events de clic