如何从try / catch块中获取变量?

时间:2012-07-11 13:09:07

标签: java android

我一直试图让这个问题持续2天,并准备扔东西......

我有一个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块之前,之后,之后声明变量的所有庄园,但我无法将其传递给我的其余代码。

我做错了什么?

4 个答案:

答案 0 :(得分:8)

嗯...

你可以在外面宣布。如

JSONArray results = null;

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

这样你可以在外面访问它,但一定要使用if来查看它是否为空。

如果你没有放JSONArray results = null,编译器可能会抱怨没有被初始化的变量。

进一步解释:

这是因为范围。当您在try中声明时,变量的范围在try结束时结束。当你在if中声明,当if结束时,不再能访问该变量。这对于临时变量非常有用,在这些变量中,您只使用它们进行比较或更好的代码可读性,内存重用等。(如果这甚至是单词,则为idk)。无论如何,如果你的变量需要在类中的任何地方访问,那么最好将其声明为一个字段。

我没看过this explanation,但看起来不错。看一看。

答案 1 :(得分: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());                                      
}

答案 2 :(得分:1)

加布里埃尔描述的方式很有效,但你可以用这种方法遇到nullPointerException。我宁愿这样做:

JSONArray results = new JSONArray();

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

答案 3 :(得分: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 ...) {
    ...
}