2011-08-18 10 views
6

मेरे कोड निकालने परिणाम है, लेकिन, कभी कभी, मैं मान 1 करने के लिए शुरू नहीं है, और मैं उस तरह एक त्रुटि है:टेस्ट अगर getJSONArray अशक्त या JSONObject की नहीं

org.json.JSONException: No value for 1 

मेरे कोड:

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

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

यदि ऑब्जेक्ट कोड (i) मौजूद है या नहीं तो मैं निष्कर्षण से पहले परीक्षण करना चाहता हूं। मैं यह कैसे कर सकता हूं ?

+0

मैं गलत हो सकता है, लेकिन यह शून्य आधारित सूचकांक नहीं होना चाहिए? –

उत्तर

12

obj.optJSONArray(name) का उपयोग करें यदि नाम मौजूद नहीं है तो प्रतिक्रिया शून्य होगी।

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

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

यह लाइन: JSONArray arr = obj.optJSONArray ("" + i); त्रुटि के लिए ज़िम्मेदार है, और कोड को रोकें। यह कभी "अगर" तक नहीं पहुंचता है। यदि यह शून्य है तो मैं कैसे परीक्षण कर सकता हूं? – toshiro92

+4

आपको betJen getJSONArray और optJSONArray में अंतर को समझने की आवश्यकता है। यदि कुंजी मौजूद नहीं है तो पहला क्रैश होता है, दूसरा दूसरा शून्य देता है, जिसे आप परीक्षण कर सकते हैं। – njzk2

+0

@ njzk2 सही – Kevin

3

उपयोग JSONObject.optJSONArray(key).

प्रलेखन में संकेत के रूप में, यह मामले में अशक्त रिटर्न कुंजी मौजूद नहीं है।

इसके अलावा, आपकी JSON संरचना अजीब लगती है। किसी ऑब्जेक्ट में आपके पास संख्यात्मक ऑर्डर की गई कुंजी क्यों हैं? क्या वह एक ऐरे नहीं होना चाहिए?

+0

है कि मेरे कोड की एक विशेषता, मुझे डेटाबेस में डेटा पुनर्प्राप्त करने के लिए एक int की आवश्यकता है – toshiro92

0

आप JSONArray की वापसी शून्य की जांच के लिए .length() का उपयोग नहीं कर सकते हैं। उपयोग .isNull ("xxx") .length के बजाय(), उदाहरण के नीचे है:

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

Aey.Sakon

संबंधित मुद्दे