2012-07-11 278 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