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

Android SortedList抛出IndexOutOfBoundsException,请求协助排查解决

问题分析

你遇到的java.lang.IndexOutOfBoundsException: Asked to get item at 0 but size is 0异常,核心原因是当orderSortedList为空时,循环结束后直接调用了orderSortedList.get(0)。此时列表元素数量为0,不存在索引为0的元素,直接访问就会触发越界异常。

看你代码逻辑:循环遍历完列表后,不管列表是否为空,都直接执行orderSortedList.get(0)来弹出Toast,这就是触发异常的关键点。

修复方案

在访问列表第0个元素前,先判断列表是否为空:

public Order gimmeThePendingOrderToDeliver(String _id, String my_phone) {
    for (int i = 0; i < orderSortedList.size(); i++) {
        Order o = orderSortedList.get(i);

        boolean a = o.isCanceled_by_user(), b = o.isCanceled_by_owner(), c = o.isDelivered();
        String d = o.getDelivery_guy();
        if (_id.equals(o.get_id()) && !a && !b && !c && d.equals(my_phone)) {
            Toast.makeText(context, "IM HERE", Toast.LENGTH_SHORT).show();
            return o;
        }
    }
    // 先判断列表是否为空,再执行Toast逻辑
    if (!orderSortedList.isEmpty()) {
        Toast.makeText(context, orderSortedList.get(0).get_id(), Toast.LENGTH_SHORT).show();
    } else {
        // 列表为空时的提示,可根据业务需求调整文案
        Toast.makeText(context, "暂无订单数据", Toast.LENGTH_SHORT).show();
    }
    return null;
}
额外优化建议
  • 可以用foreach循环简化遍历代码,避免手动维护索引:
    for (Order o : orderSortedList) {
        // 保留原判断逻辑即可
    }
    
  • 如果orderSortedList在多线程环境下被操作,建议添加线程同步保护,避免遍历过程中列表被修改引发的并发问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:24:58