2017-10-11 16 views
0

그래서 나는이 스톱워치를 가지고 있지만 나는 그것의 활동을 열 때 내가 무엇을 얻을 수 있습니다 :안드로이드 스톱워치 응용 프로그램 충돌

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) 
    } 

} 
} 

내가 정확히 볼려고 :

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)  

이 내 코드입니다 내 textView 문제는 무엇 이었지만 문제가 될만한 것을 보지 못했습니다. 나는 그것이 개인, 초기화 및 교미 모든하지만 난 어떤 도움은 매우 극명하게 될 것이다

:

감사

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> 
+1

는 XML 파일도 – UltimateDevil

+1

볼 게시 [코 틀린에 뷰를 초기화하는 방법 ** 여기 **] (https://stackoverflow.com/a/46506887/7073808) – UltimateDevil

+0

@UltimateDevil – MargardiaGhy

답변

0

그것은 당신처럼 보이는 '을 Kotlin Android 확장 기능을 사용합니다. 이 경우보기에 lateinit var을 작성할 필요가 없으며 XML 파일에서 해당 ID를 참조 할 수 있습니다.

그래서 그 대신이의

:

class StopwatchActivity : AppCompatActivity() { 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_stopwatch) 

     textView.text = "00:00:00" 
    } 

} 

그리고 다른 모든 뷰와 같은 :

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" 
    } 

} 

그냥이 할.

Kotlin Android 확장자 이외의 옵션은 this discussion을 참조하십시오.

+0

나는 고마워. 그게 내 애플 리케이션의 유일한 문제는 옳은가요? :) 많이 고맙습니다 – MargardiaGhy

+0

이 변경 사항과 함께 작동합니까? – zsmb13