2011-09-08 40 views
5

Hôm nay, tôi đang cố gắng tối ưu hóa JSONArray của mình về số android developer documentation. Tôi được cho là để tối ưu hóa nó nhưng có thông báo lỗi sắp ra.Tối ưu hóa JSonArray cho Vòng

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")); 
} 

Và tôi đã tối ưu hóa trên mã hóa như sau

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

Thật không may, tôi đã nhận được thông báo sau lỗi xảy ra trên "infojson) {"

Chỉ có thể lặp qua một mảng hoặc một thể hiện của java.lang.Iterable

Trả lời

8

Bạn không thể sử dụng JSONArray với cú pháp đó vì nó không thực hiện giao diện Iterable. Một lưu ý phụ, cải thiện hiệu năng vi mô mà bạn nhận được có lẽ sẽ không ảnh hưởng đến hiệu suất ứng dụng của bạn vì kết quả JSON được trả về từ WebService thường không có kích thước lớn.

+0

JSON của tôi là khoảng 650.000 byte. Liệu nó cũng được tính là 'không lớn'? – choz

2

Bạn nhận được lỗi đó vì JSONArray không triển khai Iterableinterface.

Tóm lại, không có cách nào để giải quyết vấn đề này; bạn cần phải tuần tự hóa JSONObjects vào lớp tùy chỉnh của mình.

Để tiết kiệm thời gian, hãy sử dụng (Object one: all) over (i=0; i < all.getLength(); i++) sẽ không cung cấp cho bạn bất kỳ cải tiến thời gian chạy nào.

Chỉ cần dính vào vòng lặp bình thường.