致因: com.example.android.architecture.MainActivity.updateDisplay(MainActivity.kt:59) at com.example.android.architecture.MainActivity.onCreate(MainActivity.kt:44):java.lang.ArrayIndexOutOfBoundsException: length=5;index=5
更改索引和类视图
class MainActivity : AppCompatActivity() {
private lateinit var dice: IntArray
private lateinit var headlineText: String
private val imageViews by lazy {
arrayOf<ImageView>(findViewById(R.id.die1),
findViewById(R.id.die1),
findViewById(R.id.die2),
findViewById(R.id.die3),
findViewById(R.id.die4),
findViewById(R.id.die5)
)
}
private val headline by lazy { findViewById<TextView>(R.id.headline) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
headlineText = savedInstanceState?.getString(HEADLINE_TEXT)
?: getString(R.string.welcome)
dice = savedInstanceState?.getIntArray(DICE_COLLECTION)
?: intArrayOf(6,6,6,6,6)
lifecycle.addObserver(MyLifeCycleObserver())
fab.setOnClickListener{
fabClickHandler()}
updateDisplay()
}
private fun fabClickHandler(){
dice = DiceHelper.rollDice()
headlineText = DiceHelper.evaluateDice(this,dice)
updateDisplay()
}
private fun updateDisplay() {
for (i in 0 until imageViews.size) {
val drawableId = when (dice[i]) {
1 -> R.drawable.die_1
2 -> R.drawable.die_2
3 -> R.drawable.die_3
4 -> R.drawable.die_4
5 -> R.drawable.die_5
6 -> R.drawable.die_6
else -> R.drawable.die_6
}
imageViews[i].setImageResource(drawableId)
}
headline.text = headlineText
}
override fun onSaveInstanceState(outState: Bundle?) {
outState?.putString(HEADLINE_TEXT,headlineText)
outState?.putIntArray(DICE_COLLECTION,dice)
super.onSaveInstanceState(outState)
}
}不知道为什么我的android应用程序没有运行
发布于 2019-08-24 16:57:23
骰子大小为5,当ImageViews有6个元素时,循环运行6次,第六次出现异常。
发布于 2019-08-24 17:40:47
您正在用5个元素初始化骰子数组,以防止出现空保存实例。
"dice = savedInstanceState?.getIntArray(DICE_COLLECTION)
?: intArrayOf(6,6,6,6,6)"'===========================================================和您的Imageviews有6个元素
private val imageViews by lazy {
arrayOf<ImageView>(findViewById(R.id.die1),
findViewById(R.id.die1),
findViewById(R.id.die2),
findViewById(R.id.die3),
findViewById(R.id.die4),
findViewById(R.id.die5)
)
}因此,当您在循环运行中访问骰子元素时,=====================================================
for (i in 0 until imageViews.size) {
val drawableId = when (dice[i]) {它给了例外
发布于 2019-08-24 16:54:24
错误在这里:
for (i in 0 until imageViews.size) {
val drawableId = when (dice[i]) {imageViews由6个元素组成。
dice由5个元素组成。
dice = savedInstanceState?.getIntArray(DICE_COLLECTION)
?: intArrayOf(6,6,6,6,6)
private val imageViews by lazy {
arrayOf<ImageView>(
findViewById(R.id.die1),
findViewById(R.id.die1), //maybe it is duplicated
findViewById(R.id.die2),
findViewById(R.id.die3),
findViewById(R.id.die4),
findViewById(R.id.die5)
)https://stackoverflow.com/questions/57639466
复制相似问题