Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Optimize JSonArray for Loop

Tags:

java

json

android

Today, I'm trying to optimize my JSONArray regarding android developer documentation. I was supposed to optimize it but there is error message coming out.

JSONArray infojson = json.getJSONArray("getInfo");          
for(int i=0;i < infojson.length();i++){                                     
    JSONObject e = infojson.getJSONObject(i);
    hm = new HashMap<String, Object>();
    hm.put(MYNAME, e.getString("uname"));
    hm.put(MYAGE, e.getString("uage"));
}

And I've optimized above coding as follow

JSONArray infojson = jsonObject.getJSONArray("getInfo");
for (Object o : infojson ) {
    JSONObject jsonLineItem = (JSONObject) o;
    String myname = jsonLineItem.getString("uname");
    String myage = jsonLineItem.getString("uage");
}

Unfortunately, I got the following error message occuring on "infojson ) {"

Can only iterate over an array or an instance of java.lang.Iterable

like image 745
PPShein Avatar asked Sep 08 '11 00:09

PPShein


2 Answers

You can't use JSONArray with the that syntax as it doesn't implement Iterable interface. As a side note, the micro performance improvement you get probably won't affect your application performance as JSON results that are returned from the WebService are typically not large in size.

like image 136
momo Avatar answered Nov 05 '22 21:11

momo


You're getting that error because JSONArray doesn't implement the Iterable interface.

In short, there's no clean way to solve this; you'd have to serialize the JSONObjects into your custom class.

To save you time though, using (Object one: all) over (i=0; i < all.getLength(); i++) won't give you any runtime improvements.

Just stick to the normal for loop.

like image 35
soBinary Avatar answered Nov 05 '22 20:11

soBinary