Jetpack Compose调用painterResource触发ArrayIndexOutOfBoundsException怎么解决
错误原因
你犯了概念混淆的逻辑错误:
- 你定义的
items是长度为3的资源ID列表,合法索引只能是0、1、2三个值,但你直接把资源ID或范围超出合法索引的myInt当成了列表下标传给items[]。 R.drawable.placholder是安卓编译阶段自动生成的整型资源ID,数值远大于2;myInt的取值范围是-1到13,绝大多数值都不在items的合法索引范围内,运行时自然会触发数组越界异常。你报错中提到的length=4; index=4,就是运行时实际传入的下标值达到了4,超过了目标容器的最大合法索引3。
修复方案
你的需求应该是:当myInt为null、或者myInt不在items合法索引范围内时显示占位图,否则显示items对应索引的图片,正确实现代码如下:
val items = listOf(R.drawable.red, R.drawable.green, R.drawable.blue) val targetRes = if (myInt == null || myInt < 0 || myInt >= items.size) { R.drawable.placholder } else { items[myInt] } Image(painter = painterResource(targetRes), contentDescription = null)
也可以用Kotlin扩展函数简化写法:
val items = listOf(R.drawable.red, R.drawable.green, R.drawable.blue) val targetRes = myInt?.takeIf { it in items.indices }?.let { items[it] } ?: R.drawable.placholder Image(painter = painterResource(targetRes), contentDescription = null)
内容的提问来源于stack exchange,提问作者ABINASH KUMAR
相关产品推荐
相关产品推荐

