在一个活动中,我编写了可以正常工作的代码。
但是现在我已经使用以下代码为此活动添加了一个方法:
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]):
我做错了什么?
谢谢!
答案 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