非法状态异常 OnClick 方法
Illegal state exception OnClick Method
我是 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.access00(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.access00(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)
这是错误。
Size
returns 列表中项目的总数,所以如果你有 2 个项目,那么大小将为 2,但是数组是从零开始的,所以你必须添加一个-1 到您的陈述:
var random = (0..tabooList.size-1).random()
问题出在 Range
函数上,因为 ..
意味着两个极端都包括在内。请查看 official docs 了解更多信息。
尝试以下方法
(0 until tabooList.size).random()
编辑:
生成 0 到 tabooList.size
之间的随机数的更好方法如下
var random = Random.nextInt(tabooList.size)
// this throws IllegalArgumentException if the size is zero
我是 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.access00(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.access00(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)
这是错误。
Size
returns 列表中项目的总数,所以如果你有 2 个项目,那么大小将为 2,但是数组是从零开始的,所以你必须添加一个-1 到您的陈述:
var random = (0..tabooList.size-1).random()
问题出在 Range
函数上,因为 ..
意味着两个极端都包括在内。请查看 official docs 了解更多信息。
尝试以下方法
(0 until tabooList.size).random()
编辑:
生成 0 到 tabooList.size
之间的随机数的更好方法如下
var random = Random.nextInt(tabooList.size)
// this throws IllegalArgumentException if the size is zero