2011-08-18 13 views
6

I miei risultati di estratto di codice di JSONObject, ma, a volte, il valore non mi cominciano a 1, e ho un errore del genere:prova se getJSONArray è null o non

org.json.JSONException: No value for 1 

Il mio codice:

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

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

Voglio testare prima dell'estrazione se il codice oggetto (i) esiste o meno. Come posso farlo?

+0

I può essere sbagliato, ma non dovrebbe essere indice di base zero? –

risposta

12

utilizzare obj.optJSONArray(name) la risposta sarà null se il nome non esiste.

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

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

Questa riga: JSONArray arr = obj.optJSONArray ("" + i); è responsabile dell'errore e interrompe il codice. Non arriva mai al "se". Come posso verificare se è nulla? – toshiro92

+4

è necessario comprendere la differenza tra getJSONArray e optJSONArray. Il primo si blocca se la chiave non è presente, la seconda restituisce null, che è possibile testare. – njzk2

+0

@ njzk2 ha ragione – Kevin

3

uso JSONObject.optJSONArray(key).

Come indicato nella documentazione, restituisce null nel caso la chiave non è presente.

Inoltre, la struttura JSON sembra strana. Perché hai chiavi numeriche ordinate in un oggetto? non dovrebbe essere una matrice?

+0

Che una particolarità del mio codice, ho bisogno di un int per recuperare un dato nel database – toshiro92

0

Non è possibile utilizzare .length() per controllare il valore restituito null di JSONArray. Usa .isNull ("xxx") invece di .length(), l'esempio è qui sotto:

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

Aey.Sakon