2012-07-11 17 views
6

我一直試圖得到這個權利爲2天,我準備扔東西.....如何從try/catch塊中獲取變量?

我有一個JSONArray,我正在處理一個try/catch塊,但它不似乎在最後傳遞了變量。

我的代碼:

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());          
} 

我已經試過之前聲明變量,在,在try/catch塊之後的所有莊園,但我不能把它傳遞給我的代碼的其餘部分。

我在做什麼錯?

+0

您正在處理json,無論您將聲明您必須在try catch塊中聲明 – AkashG 2012-07-11 13:11:14

+0

您可以發佈您的json數據嗎? – Suresh 2012-07-11 13:11:21

+2

閱讀Java中的範圍! – hsz 2012-07-11 13:12:13

回答

8

嗯......

您可以在外面聲明。如

JSONArray results = null; 

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

這樣你可以在外面訪問它,但一定要用if來查看它是否爲空。

如果你不把JSONArray results = null編譯器可能會抱怨變量未被初始化。

進一步解釋:

這是因爲的範圍。當您在try中聲明時,變量的作用域在try結束時結束。當你在if中聲明的時候,如果這個if結束,變量就不能再被訪問了。這對臨時變量非常有用,您只將它們用於比較或更好的代碼可讀性,內存重用等(如果這甚至是單詞,則爲idk)。無論如何,如果您的變量需要在課程中的任何地方進行訪問,最好將其聲明爲字段。

我沒看過this explanation,但看起來不錯。看一看。

+0

謝謝!那正是我想要的。 – user1517838 2012-07-12 08:53:35

1

聲明它之外可以解決這個問題:

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

你錯過了一個分號。 – 2012-07-11 13:11:06

+0

嘿...謝謝你們! – 2012-07-11 13:15:12

0

聲明你的變量外塊,並分配給它的塊中:

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

加布裏埃爾描述的工作方式,但你可能會遇到與approach.I'd而做這nullPointerException

JSONArray results = new JSONArray(); 

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

這是真的,但我說他應該檢查變量是否爲空。我認爲這樣比較好,因爲如果他沒有得到任何結果,那麼他不想做任何外部變量,畢竟他沒有得到任何結果。 – 2012-07-11 13:19:23

+1

沒錯:-) – 2012-07-11 13:20:28