为什么我有这个错误? ArrayIndexOutOfBoundsException

时间:2018-08-11 09:08:26

标签: java android android-studio

我正在创建一个android应用程序。当我在Emulator,Samsung S8 Plus和General Mobile GM8中进行测试时,我没有任何错误,但播放控制台总是让我有些迷恋。

代码是:

int count = getItemCount() >= 30 ? 30 : getItemCount();
if (count == 0)
    return new long[] {0};

long[] result = new long[count];
for (int i = 0; i < count; i++)
    result[i] = users.get(i).getPk();
return result;

错误消息: ArrayIndexOutOfBoundsException

我真的不知道该如何解决。

5 个答案:

答案 0 :(得分:1)

在条件正常的情况下删除“ =”符号:

                     Table "public.ryzom_characters"
    Column     |          Type          | Collation | Nullable | Default
---------------+------------------------+-----------+----------+---------
 cid           | bigint                 |           |          |
 cname         | character varying(255) |           | not null |
 p06           | jsonb                  |           |          |
 x01           | jsonb                  |           |          |

答案 1 :(得分:0)

例如如果count是4,并且用户列表中只有3个数据或少于count,那么它将抛出ArrayIndexOutOfBoundsException

为避免ArrayIndexOutOfBoundsException,请尝试以下方法

int count = getItemCount() >= 30 ? 30 : getItemCount();
    if (count == 0)
        return new long[] {0};

    long[] result = new long[count];
    if(users != null && users.size() > 0){
        for (int i = 0; i < count; i++){
            if(i >= users.size()){
                break;
            }
            result[i] = users.get(i).getPk();
        }
    }

return result;

答案 2 :(得分:0)

如果您想要的数组大小等于users列表的大小,最多包含30个项目,最少1个元素,则将count更改为users列表大小,如果这个大小小于30:

    int count = getItemCount() >= 30 ? 30 : getItemCount();
    if (count > users.size())
        count = users.size();
    if (count == 0)
        return new long[] {0};

    long[] result = new long[count];
    for (int i = 0; i < count; i++)
        result[i] = users.get(i).getPk();
    return result;

答案 3 :(得分:0)

它可能由于索引不足而发生。 让我简化一下,如果数组有4个索引,那么

a=[0,1,2,3]//eg:

因此,如果您要打印[0] o / p =

0

但是对于[5]: 您将拥有 ArrayOutofBoundsExeption

在您的示例中,您未指定用户字段,因此在进行一些假设后是如何生成的。 我告诉你

result[i] = users.get(i).getPk();

此处问题发生在users.get(i)中 用户字段不是包含值但可以是动态的: 所以我的解决方案是 你应该用 尝试异常,然后将其传递给 ArrayIndexOutOfBoundsException

并引发异常,您的程序应该可以正常工作! 希望对您有帮助!

答案 4 :(得分:0)

users列表的大小似乎不等于counts,并且更小。为了防止ArrayIndexOutOfBoundsException,建议您以这种方式编辑代码:

int count = getItemCount() >= 30 ? 30 : getItemCount();
count = count > users.size()  ? users.size() : count;
        if (count == 0)
            return new long[] {0};

        long[] result = new long[count];
        for (int i = 0; i < count; i++)
            result[i] = users.get(i).getPk();
        return result;

通过这样修改代码,在users列表大于counts的情况下,users列表末尾的项目将没有任何控件。