2015-03-02 3 views
7

Я работаю над Android-приложением, которое получает json-содержимое веб-службы под названием «WebUntis». Содержание Json я получаю выглядит следующим образом:Как проверить, что JSONArray пуст в java?

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

Как вы можете видеть, в результате массива есть и другие массивы, такие как «кл», «су» и «ро»

я набираюсь содержимое этого массива, а затем я храню их в arraylist. Но когда один из этих массивов пуст, например;

{"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

хорошая работа 'если (Ы! = NULL && kl.length()> 0) {' простой – marlonpya

Смежные вопросы