List Android中的ArrayIndexOutOFBoundsException

时间:2012-04-09 14:33:28

标签: android list exception

我有一个ArrayIndexOutOfBoundsException

private Size getPictureSize() {
    List<Size> list = camera.getParameters().getSupportedPictureSizes();
        int i = 0;
    for (Size size : list) {
        if (Math.min(size.width, size.height) <= 800) {
            if (Math.max(size.width, size.height) > 800) {
                return size;
            } else {

                return (i > 0 ? list.get(i - 1) : list.get(0));
            }
        }
        i++;

    }

    return list.get(0);
}

这是有人要求我在将其投放市场后进行测试的应用程序的一部分,其中一个错误报告就是这一行

return (i > 0 ? list.get(i - 1) : list.get(0));

我知道这个例外意味着什么,但是可能导致什么呢?

1 个答案:

答案 0 :(得分:1)

您的代码中存在一些问题:

  • 此行:return (i > 0 ? list.get(i - 1) : list.get(0));可能会计算列表中不存在的索引;
  • 如果您的列表为空,则代码的最后一行(return list.get(0);)可能会引发IndexOutOfBoundsException

我更改了您的代码以解决这些问题。看看它是否解决了你的问题:

private Size getPictureSize() {
    List<Size> list = camera.getParameters().getSupportedPictureSizes();
    Size prevSize = null;
    for (Size size : list) {
        if (Math.min(size.width, size.height) <= 800) {
            if (Math.max(size.width, size.height) > 800) {
                return size;
            } else {
                return (prevSize == null? size : prevSize);
            }
        }
        prevSize = size;
    }

    if(list.size() > 0) {
        return list.get(0);
    }

    return null;
}