2013-11-21 110 views
0

所以我在这里有一些代码,我试图优化,我无法弄清楚如何使它至少成为for:each循环。有没有我可以使用的某种迭代器,可以让我为迭代器中的每个项目执行操作?任何帮助将不胜感激。Android:从JSONArray获取元素而不使用标准for循环

public static ArrayList<Community> parseRelatedCommunities(String response) throws JSONException { 

    ArrayList<Community> relCommunities = new ArrayList<Community>(); 
    Log.d(TAG, "parseRelatedCommunities:"); 
    try { 
     Gson gson = new Gson(); 
     int size; 
     JSONObject responseObj = new JSONObject(response); 
     responseObj = responseObj.getJSONObject(JSON_RESPONSE); 
     JSONArray communitiesArray = responseObj.getJSONArray(JSON_COMMUNITY); 
     Log.d(TAG, "parsing communities: " + communitiesArray.toString()); 
     size = communitiesArray.length(); 
      //this needs to change 
      for(int i=0; i<size; i++) { 
       JSONObject json = communitiesArray.getJSONObject(i); 
       relCommunities.add(gson.fromJson(json.toString(), Community.class));} 
     gson = null; 
    } 
    catch (JSONException e) 
    { 
     Log.d(TAG, "JSON Parse Related Communities error: " + e.getStackTrace().toString()); 

    } 
    finally 
    { 
     if(relCommunities.size() <= 0) 
     { 
     Community noCommunities = new Community(); 
     noCommunities.name = "No Available Communities"; 
     relCommunities.add(noCommunities); 
     } 
    } 
    return relCommunities; 
} 

}

+0

为什么你需要优化它这么多?我会想,如果有任何东西从for循环中拉出JSONObject json(然后你只有一个内存分配)比尝试优化for循环更好的开始 – panini

回答

0

我没有找到一个方法来使用的:每一个循环,我不得不使用JSONArrays和一个JSONObjects到JsonArrays和JsonElements(注意情况的细微差别)开关。这里是更新的解析部分:

JsonObject object = parser.parse(readerJS).getAsJsonObject(); 

     JsonObject responseObject = object.getAsJsonObject("response"); 

     JsonArray categoriesArray = responseObject.getAsJsonArray("badges"); 

     for (JsonElement je : categoriesArray) { 
      newGameData.categories.add(gs.fromJson(je, CategoryData.class)); 
     }