2015-03-02 12 views
7

मैं एक एंड्रॉइड ऐप पर काम कर रहा हूं जो "WebUntis" नामक एक webservice की जेसन सामग्री प्राप्त करता है। Json सामग्री मैं कैसी लगती है हो रही है:जावा में JSONArray खाली है या नहीं, यह जांचने के लिए कैसे करें?

{"jsonrpc":"2.0","id":"req-002", 
"result":[ 
    {"id":125043,"date":20110117,"startTime":800,"endTime":850, 
    "kl":[{"id":71}], 
    "te":[{"id":23}], 
    "su":[{"id":13}], 
    "ro":[{"id":1}]}, 
    {"id":125127,"date":20110117,"startTime":1055,"endTime":1145, 
    "kl":[{"id":71}], 
    "te":[{"id":41}], 
    "su":[{"id":19}], 
    "ro":[{"id":31}]}, 
...]} 

आप परिणाम सरणी में देखते हैं वहाँ भी कर रहे हैं "kl", "सु" और "ro"

मैं हो रही है जैसे अन्य सरणियों सकते हैं इन सरणी की सामग्री और फिर मैं उन्हें एक सरणी सूची में स्टोर करता हूं। लेकिन जब इनमें से एक सरणी खाली है, जैसे;

{"jsonrpc":"2.0","id":"req-002", 
    "result":[ 
     {"id":125043,"date":20110117,"startTime":800,"endTime":850, 
      "**kl":[]**, 
      "te":[{"id":23}], 
      "su":[{"id":13}], 
      "ro":[{"id":1}]}, 
     {"id":125127,"date":20110117,"startTime":1055,"endTime":1145, 
      "kl":[{"id":71}], 
      "te":[{"id":41}], 
      "su":[{"id":19}], 
      "ro":[{"id":31}]}, 
...]} 

मैं हमेशा त्रुटि IndexOutOfRangeException, हो रही है लेकिन मैं हमेशा यह कह रहा हूँ कि यह खाली सरणियों नहीं लेना चाहिए, यह मैं क्या करने की कोशिश की है:

JSONObject jsonResult = new JSONObject(s); 
// Get the result object 
JSONArray arr = jsonResult.getJSONArray("result"); 

for (int i = 0; i < arr.length(); i++) { 
    JSONObject c = arr.getJSONObject(i); 
    anfangStunde[i] = c.getString("startTime"); 
    endeStunde[i] = c.getString("endTime"); 

    // get the jsonarrays (kl, su, ro) 
    kl = c.getJSONArray("kl"); 
    su = c.getJSONArray("su"); 
    ro = c.getJSONArray("ro"); 

    // check if kl is not null 
    if(kl != null){ 
     klassenID[i] = kl.getJSONObject(0).getString("id"); 
    } 
    if (klassenID[i] != null) { 
     klasse = webuntis.klassenMap.get(klassenID[i]); 
     Log.d("ID und Klasse=", "" + klassenID[i] + ";" + klasse); 
    } 
    // get th ids 
    fachID[i] = su.getJSONObject(0).getString("id"); 
    if (fachID[i] != null) { 
     fach = webuntis.faecherMap.get(fachID[i]); 
     Log.d("ID und Fach=", "" + fachID[i] + ";" + fach); 
    } 

    // "Start;Ende;Klasse;Fach;Raum" store in arraylist 
    webuntis.stundenPlan.add(anfangStunde[i] + ";" + endeStunde[i] + ";" + klasse + ";" + fach); 
    // Write Data into a file for offline use: 
} 
कर सकते हैं

किसी को भी मदद मैं

उत्तर

18

सरणी फ़ाइल में परिभाषित किया गया है लेकिन खाली है, की तरह हैं:

... 
"kl":[] 
... 

फिर getJSONArray("kl") एक खाली सरणी वापस आ जाएगी, लेकिन वस्तु अशक्त नहीं है। तो फिर, अगर आप ऐसा करते हैं: - सरणी में कोई पहला तत्व है

kl = c.getJSONArray("kl"); 
if(kl != null){ 
    klassenID[i] = kl.getJSONObject(0).getString("id"); 
} 

klनहीं बातिल और kl.getJSONObject(0) एक अपवाद फेंक नहीं है।

इसके बजाय आप length(), उदा .:

kl = c.getJSONArray("kl"); 
if(kl != null && kl.length() > 0){ 
    klassenID[i] = kl.getJSONObject(0).getString("id"); 
} 
+0

अच्छा काम 'अगर (kl! = अशक्त && kl.length()> 0) {' सरल परीक्षण कर सकते हैं – marlonpya

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

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