2012-07-11 13 views
6

Ho cercato di ottenere questo per 2 giorni e sono pronto a lanciare qualcosa .....Come ottengo una variabile da un blocco try/catch?

Ho un JSONArray che sto elaborando in un blocco try/catch ma non lo fa sembra passare la variabile alla fine.

Il mio codice:

try{ 
    //Get the element that holds the results (JSONArray) 
    JSONArray getresults = json.getJSONArray("results"); 
    //Loop the Array 
    for(int i=0;i < getresults.length();i++){      
     HashMap<String, String> map = new HashMap<String, String>(); 
     JSONObject e = getresults.getJSONObject(i); 
     totalpass = e.getJSONObject(i).getString("ftotalpass");       
    }        

} catch(JSONException e)  { 
    Log.e("log_tag", "Error parsing data "+e.toString());          
} 

Ho provato tutti i maniero di dichiarare la variabile prima, in, dopo il blocco try/catch, ma io proprio non riesco a farlo passare per il resto del mio codice.

Cosa sto sbagliando?

+0

Hai a che fare con json, ovunque dichiarerai di dover dichiarare in try catch block – AkashG

+0

puoi pubblicare i tuoi dati json? – Suresh

+2

Leggi su scope in Java! – hsz

risposta

8

Hmm ...

È possibile dichiarare fuori. Come ad esempio

JSONArray results = null; 

try { 
    results = json.getJSONArray("results"); 
}... 

questo modo è possibile accedere al di fuori, ma essere sicuri di utilizzare un caso per vedere se è nullo.

Se non si inserisce JSONArray results = null, il compilatore probabilmente si lamenterà della non inizializzazione della variabile.

Ulteriori spiegazioni:

Ciò avviene a causa della portata. Quando dichiari all'interno della prova, l'ambito della variabile termina quando termina la prova. Quando dichiari all'interno di un if, quando ciò termina, non è più possibile accedere alla variabile. Questo è molto utile per le variabili temporanee in cui le utilizzi solo per confronto o migliore leggibilità del codice, riutilizzo della memoria, ecc. (Idk se questa è anche una parola). Ad ogni modo, se la tua variabile deve essere accessibile ovunque all'interno di una classe, potrebbe essere meglio dichiararla come campo.

Non ho letto this explanation, ma sembra buono. Guarda.

+0

Grazie! era proprio quello che stavo cercando. – user1517838

1

Dichiarare fuori risolverebbe il problema:

JSONArray getresults = null; 
try{ 
    //Get the element that holds the results (JSONArray) 
    getresults = json.getJSONArray("results"); 
    //Loop the Array 
    for(int i=0;i < getresults.length();i++){      
     HashMap<String, String> map = new HashMap<String, String>(); 
     JSONObject e = getresults.getJSONObject(i); 
     totalpass = e.getJSONObject(i).getString("ftotalpass");         
    }        
} catch(JSONException e)  { 
    Log.e("log_tag", "Error parsing data "+e.toString());          
} 
+0

Manca un punto e virgola. –

+0

hey ... grazie ragazzi! –

0

dichiarare la variabile di fuori del blocco e assegnare all'interno del blocco:

JSONArray getresults; 

try { 

    ... 
    getresults = ...; // your assignment; 
    ... 
}        
catch(JSONException e) { 
    Log.e("log_tag", "Error parsing data" + e.toString()); 
    getresults = ...; //maybe some other assignment 
} 

//use variable 
if(getresults ...) { 
    ... 
} 
1

il modo in cui Gabriel ha descritto le opere, ma si potrebbe incorrere in un nullPointerException con quella approach.I'd piuttosto fare questo:

JSONArray results = new JSONArray(); 

try { 
    results = json.getJSONArray("results"); 
}... 
+1

Questo è vero, ma io dico che dovrebbe controllare se la variabile è nulla. Penso che sia meglio perché se non ottiene alcun risultato, qualunque cosa voglia fare con la variabile esterna non dovrebbe essere fatta, dopotutto non ha avuto alcun risultato. –

+1

proprio così :-) –

Problemi correlati