2015-03-02 31 views
7

"WebUntis" adlı bir web servisinin json içeriğini alan bir android uygulaması üzerinde çalışıyorum. "Kl", "su" ve "ro"java'da JSONArray boş olup olmadığını nasıl kontrol edersiniz?

alıyorum gibi diğer diziler de vardır size sonuç dizide görebileceğiniz gibi

{"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}]}, 
...]} 

: Json içeriği i gibi görünüyor alıyorum Bu dizinin içeriği ve sonra bunları bir arraylist içinde saklıyorum. Ancak bu dizilerden biri boş olduğunda;

{"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}]}, 
...]} 

Hep hata IndexOutOfRangeException, alıyorum ama hep boş diziler almamalıdır bu kadar söylüyorum, bu ben denedim budur:

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: 
} 

Can kimse yardım ben mi ?

cevap

18

dizi dosyası de tarif edildiği gibi, boş ise:

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

sonra getJSONArray("kl") bir boş dizi döndürür, ancak bu amaç, boş değil. Bunu Ardından,: - Dizideki hiçbir birinci unsur yoktur

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

klboş ve kl.getJSONObject(0) bir istisna durumu değildir.

Bunun yerine

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

güzel iş 'eğer (kl! = Null && kl.length()> 0) {' basit length(), ör .: test edebilirsiniz – marlonpya