2011-08-18 38 views
6

My kết quả chiết xuất mã của JSONObject, nhưng, đôi khi, những giá trị tôi không bắt đầu 1, và tôi có một lỗi như thế:Kiểm tra xem getJSONArray là null hay không

org.json.JSONException: No value for 1 

Mã của tôi:

JSONObject obj = new JSONObject(result); 
     for(int i=1;i<=14;i++) { 

      JSONArray arr = obj.getJSONArray(""+i); 
     extraction(arr, i); 
     } 

Tôi muốn kiểm tra trước khi trích xuất nếu mã đối tượng (i) tồn tại hay không. Làm thế nào tôi có thể làm điều này?

+0

Tôi có thể sai nhưng không nên đó là không chỉ số dựa? –

Trả lời

12

sử dụng obj.optJSONArray(name) phản hồi sẽ không có giá trị nếu tên không tồn tại.

JSONObject obj = new JSONObject(result); 
    for(int i=1;i<=14;i++) { 

     JSONArray arr = obj.optJSONArray(""+i); 
     if(arr != null) { 
       extraction(arr, i); 
     } 
    } 
+0

Dòng này: JSONArray arr = obj.optJSONArray ("" + i); chịu trách nhiệm về lỗi và dừng mã. Nó không bao giờ đến "nếu". Làm thế nào tôi có thể kiểm tra nếu nó là null? – toshiro92

+4

bạn cần phải hiểu sự khác biệt betwen getJSONArray và optJSONArray. Các lỗi đầu tiên nếu khóa không có, cái thứ hai trả về null, mà bạn có thể kiểm tra. – njzk2

+0

@ njzk2 là đúng – Kevin

3

sử dụng JSONObject.optJSONArray(key).

Như đã nêu trong tài liệu hướng dẫn, nó sẽ trả về null trong trường hợp quan trọng là không có mặt.

Ngoài ra, cấu trúc JSON của bạn có vẻ lạ. Tại sao bạn có các phím số theo thứ tự trong một đối tượng? không phải đó là một Array?

+0

Đó là một đặc trưng của mã của tôi, tôi cần một int để lấy dữ liệu trong cơ sở dữ liệu – toshiro92

0

Bạn không thể sử dụng .length() để kiểm tra null trả về của JSONArray. Sử dụng .isNull ("xxx") thay vì .length(), ví dụ là dưới đây:

JSONArray magazineLove = null; 
if(!socialBook.getJSONObject(i).isNull("MagazineLove")) 
{ 
    magazineLove = socialBook.getJSONObject(i).getJSONArray("MagazineLove");     
} 

Aey.Sakon

Các vấn đề liên quan