2014-10-05 110 views
0

我有一个JSON对象的JSONArray,每个JSON对象都是一个带有“kind”键的字符串。我试图通过JSONarray循环,并通过“kind”组织它们来填充SeperatedListAdapter。我试图做到的,是这种结构Android for-loop陷入无尽循环

{ 
    communications[ 
     { "header":"kind" 
      communications[ 
      {} 
      {} 
      {} 
      {} 
      ] 

     } 

     { "header":"kind" 
      communications[ 
      {} 
      {} 
      {} 
      {} 
      ] 

     } 

    ] 


} 

我遇到的问题是for循环我已经创建了实现这一目标的陷入无限循环得到,因此崩溃的应用程序。有谁知道我在哪里出了问题?

这里是我的代码,我知道它陷在一个循环,因为它运行日志“1”的约1000倍,即使我知道,只有5我传递的数组中的东西。

for(int i = 0; i < communicationsFromFile.length(); i++){ 
       JSONObject communication = communicationsFromFile.getJSONObject(i); 
       Log.v("Communications", "kind = " + communication.getString("kind")); 
       Log.v("Communications", "newComArray = " + newComArray); 
       if(newComArray.length() != 0){ 
        Log.v("Communications", "newComArray IsNotempty"); 

        for(int a = 0; a < newComArray.length();a++){ 
         JSONObject itemInArray = newComArray.getJSONObject(a); 
         JSONArray communicationsForKind = itemInArray.getJSONArray("communications"); 

         Log.v("Communications", "1"); 

         if(itemInArray.getString("header").equals(communication.getString("kind"))){ 
          Log.v("Communications", "Header Exists"); 
          communicationsForKind.put(communication); 
          itemInArray.put("communications", communicationsForKind); 
          newComArray.put(itemInArray); 


         }else{ 
          Log.v("Communications", "Header Does not Exist"); 
          JSONObject addItemInArray = new JSONObject(); 
          JSONArray addArrayToItem = new JSONArray(); 
          addArrayToItem.put(communication); 
          addItemInArray.put("header", communication.getString("kind")); 
          addItemInArray.put("communications", addArrayToItem); 

          newComArray.put(addItemInArray); 
         } 

        } 

       }else{ 

        JSONObject addItemInArray = new JSONObject(); 
        JSONArray addArrayToItem = new JSONArray(); 
        addArrayToItem.put(communication); 
        addItemInArray.put("header", communication.getString("kind")); 
        addItemInArray.put("communications", addArrayToItem); 
        newComArray.put(addItemInArray);  

       } 
     } 

回答

1

在inner for循环的每次迭代中,您将新对象放入newComArray。条件a < newComArray.length()始终满足,因为a和数组长度都以相同的速率增长。

+0

感谢您的帮助,你可以解释更高我不知道你的意思 – iamlukeyb 2014-10-05 12:34:02

+0

我想通了,我改变了neComArray到orignal数组 – iamlukeyb 2014-10-05 13:12:13