2

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

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

    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]);

        }

nomres_reunones 的类型是 ArrayList

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

我究竟做错了什么?

谢谢!

4

3 回答 3

3

你没有推进循环:

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

正在发生的事情是您向 . 中添加了无限量的“campos”,从而ArrayList耗尽了您的程序在此过程中可用的所有内存。

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

于 2012-10-17T21:56:10.070 回答
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));

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

于 2012-10-17T21:56:21.237 回答
0

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

于 2012-10-17T21:57:23.373 回答