首页 > 解决方案 > 非法状态异常 OnClick 方法

问题描述

我是 Kotlin 的新手,并试图使应用程序成为禁忌。我有6个文本视图,其中一个是主要词,另一个是禁止词。当我单击按钮时,单词正在替换为其他单词。但是,在我多次单击该按钮后,它给了我一个非法状态异常。

var tabooList = ArrayList<WordModel>()
lateinit var wordMain : TextView
lateinit var word1 : TextView
lateinit var word2 : TextView
lateinit var word3 : TextView
lateinit var word4 : TextView
lateinit var word5 : TextView

这是我的定义。

 wordMain = findViewById(R.id.kelimeMain)
    word1 = findViewById(R.id.kelime1)
    word2 = findViewById(R.id.kelime2)
    word3 = findViewById(R.id.kelime3)
    word4 = findViewById(R.id.kelime4)
    word5 = findViewById(R.id.kelime5)


    tabooList.add(WordModel("FİİL","İŞ","OLUŞ","HAREKET","EYLEM","SÖZCÜK"))
    tabooList.add(WordModel("UYAK", "ŞİİR", "DİZE", "BENZERLİK", "KAFİYE", "SES"))

这是我的 OnCreate 方法。

fun randomWord(view: View) {
    var random = (0..tabooList.size).random()

wordMain.text = tabooList[random].anaKelime
    word1.text = tabooList[random].kelime1
    word2.text = tabooList[random].kelime2
    word3.text = tabooList[random].kelime3
    word4.text = tabooList[random].kelime4
    word5.text = tabooList[random].kelime5
}

而且,这是我的按钮的 onClick 方法。它首先给了我一个错误wordMain.text = tabooList[random].anaKelime

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.suatkkrer.taboo_android, PID: 21946
java.lang.IllegalStateException: Could not execute method for android:onClick
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
    at android.view.View.performClick(View.java:7350)
    at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)
    at android.view.View.performClickInternal(View.java:7327)
    at android.view.View.access$3600(View.java:807)
    at android.view.View$PerformClick.run(View.java:28166)
    at android.os.Handler.handleCallback(Handler.java:907)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:216)
    at android.app.ActivityThread.main(ActivityThread.java:7464)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:955)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
    at android.view.View.performClick(View.java:7350) 
    at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992) 
    at android.view.View.performClickInternal(View.java:7327) 
    at android.view.View.access$3600(View.java:807) 
    at android.view.View$PerformClick.run(View.java:28166) 
    at android.os.Handler.handleCallback(Handler.java:907) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:216) 
    at android.app.ActivityThread.main(ActivityThread.java:7464) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:955) 
 Caused by: java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
    at java.util.ArrayList.get(ArrayList.java:437)
    at com.suatkkrer.taboo_android.Activities.TabooActivity.randomWord(TabooActivity.kt:333)

这是错误。

标签: androidkotlinonclickbuttonclick

解决方案


Size返回列表中项目的总数,因此如果您有 2 个项目,则大小将为 2,但数组从零开始,因此您必须在语句中添加 -1:

 var random = (0..tabooList.size-1).random()

推荐阅读