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
相关产品推荐
相关产品推荐

