如何在JSONArray Android

时间:2016-01-07 12:28:36

标签: android json

我在 mLogger.info(items.toString())下面的代码中使用 JSONArray 时得到 ConcurrentModificationException

  public static void removeItems(long id, String mode) {
  for (int i = 0; i < items.length(); ++i) {
            try {
                if (items.getJSONObject(i).getLong(ID) == id) {
                    items.remove(i);
                    break;
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    mLogger.info(items.toString());
}

此处项目是JSONArray。当执行下面的代码时出现错误:

atal Exception: java.util.ConcurrentModificationException
   at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
   at org.json.JSONArray.writeTo(JSONArray.java:601)
   at org.json.JSONArray.toString(JSONArray.java:574)
   at com.example.test.Utility.removeItems(Utility.java:532)
   at android.os.Handler.handleCallback(Handler.java:733)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:149)
   at android.app.ActivityThread.main(ActivityThread.java:5061)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
   at dalvik.system.NativeStart.main(NativeStart.java)

有没有办法让JSONArray并发?我必须使用JSONArray ......

2 个答案:

答案 0 :(得分:1)

首先,您可以将JSONArray转换为List,然后再转换为List 只需使用Iterator删除项目,而您正在遍历列表

Iterator<JsonObject> it = convertedItemList.iterator();
while (it.hasNext()) {
    JSONObject jsonObject = it.next();
    if (jsonObject.getLong(ID) == id) {
        it.remove();
    }
}

之后,如果需要,可以将其转换回JSONArray。

答案 1 :(得分:0)

创建新的JSONArray添加所需的对象。

JSONArray newArray = new JSONArray();
JSONArray jsonArray = actualData;
for (Object obj : jsonArray) {
    JSONObject jobj = (JSONObject) obj;
    if (id.equalsIgnoreCase(jobj.get("id").toString())) {
            // Do nothing 
    } else {
             //add to new array
        newArray.add(obj);
    }
}