Android应用程序中带有ArrayList的OutOfMemoryError

时间:2012-10-17 21:54:51

标签: java android arraylist while-loop out-of-memory

在一个活动中,我编写了可以正常工作的代码。

但是现在我已经使用以下代码为此活动添加了一个方法:

    private void obtenerDatosReuniones(){

    try {

        int j=0;

        String aux = jsonReuniones.getString("nombres");

        String aux2 = null;

        aux2 = aux.replace("[", "");

        aux2= aux2.replace("]", "");

        String [] campos = aux2.split(",");

        while(j<campos.length){

            nombres_reuniones.add(campos[j]);

        }

nombres_reunones的类型是ArrayList

当我运行该应用程序时出现以下错误行nombres_reuniones.add(campos [j]):

我做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:3)

你没有推进循环:

while (j < campos.length) {
    nombres_reuniones.add(campos[j]);
    j++; // without this, you'll loop forever!
}

正在发生的事情是你向ArrayList添加了无限量的“坎普斯”,耗尽了程序中可用的所有内存。

请记住:循环的条件必须在某个时刻false才能使循环结束。如果您忘记推进循环(在这种情况下,通过递增j变量),条件将始终为true并且循环将永远不会退出,因此会创建无限循环。

答案 1 :(得分:3)

看看你的循环:

while(j<campos.length){
    nombres_reuniones.add(campos[j]);
}

您如何预期完成?您不需要修改j。鉴于您在声明并在开始时将j赋值为0后未对for (int j = 0; j < campos.length; j++) { nombres_reuniones.add(campos[j]); } 进行任何更改,它将很多更清晰:

for (String item : campos) {
    nombres_reuniones.add(item);
}

或更好:

nombres_reunions.addAll(Arrays.asList(campos));

甚至更简单:

String aux2 = null;
aux2 = aux.replace("[", "");
aux2= aux2.replace("]", "");

此外,您之前的代码可以更简单。看看这个:

aux2

为什么还要为null分配String aux2 = aux.replace("[", "").replace("]", ""); 的初始值,然后立即覆盖?此外,您可以轻松链接方法调用。它会更整洁:

String[] campos = jsonReuniones.getString("nombres")
                               .replace("[", "")
                               .replace("]", "")
                               .split(",");
nombres_reunions.addAll(Arrays.asList(campos));

事实上,你可以从头到尾将整个字符串操作链接在一起:

{{1}}

(我会停在那里,而不是内联表达......)

答案 2 :(得分:0)

您没有更新j的值,因此j总是0并始终小于campos.length