You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:45:04