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

从Firestore获取数据加载图片滑块时出现IndexOutOfBoundsException崩溃

错误原因
  • 核心问题是successAdListImageURL方法中手动遍历数组时下标使用错误:Java/Kotlin的ArrayList是0起始索引,你声明循环变量i从1开始,且循环终止条件写为i<=numOfImage,会直接访问到不存在的数组下标。
  • 报错信息中的Index: 1, Size: 1就是典型触发场景:你从Firestore拉到了1条广告数据,数组长度为1,合法下标只有0,但你的循环第一次就访问了下标1,直接触发越界崩溃。
修复方案

提供两种修复方式,优先推荐符合Kotlin语法习惯的遍历写法,避免手动控制下标出错:

方案1:使用Kotlin集合遍历(推荐)

直接遍历adImageURL集合,完全规避下标操作风险:

fun successAdListImageURL(adImageURL: ArrayList<Ads>){
    val remoteImages: ArrayList<SlideModel> = ArrayList()
    // 直接遍历集合元素,无需手动控制下标
    for (ad in adImageURL) {
        remoteImages.add(SlideModel(ad.image_url))
    }
    // 也可以用更简洁的map写法:
    // val remoteImages = adImageURL.map { SlideModel(it.image_url) } as ArrayList<SlideModel>
    binding.imageSlider.setImageList(remoteImages, ScaleTypes.CENTER_INSIDE)
    binding.imageSlider.visibility=View.VISIBLE
}

方案2:修正原有循环的下标逻辑

如果要保留手动下标写法,把循环起始值改为0,终止条件改为i < numOfImage:

fun successAdListImageURL(adImageURL: ArrayList<Ads>){
    val remoteImages: ArrayList<SlideModel> = ArrayList()
    val numOfImage=adImageURL.size
    var i=0 // 起始下标改为0

    while (i < numOfImage){ // 终止条件改为小于数组长度
        remoteImages.add(SlideModel(adImageURL[i].image_url))
        i+=1
    }
    binding.imageSlider.setImageList(remoteImages, ScaleTypes.CENTER_INSIDE)
    binding.imageSlider.visibility=View.VISIBLE
}

额外优化提示:Firestore拉取数据的代码中ad!!.ad_id = i.id的强非空断言最好替换为非空判断,避免toObject返回空时触发空指针崩溃。

内容的提问来源于stack exchange,提问作者Codist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:45:05