Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从try/catch块中获取变量?_Java_Android - Fatal编程技术网

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

Java 如何从try/catch块中获取变量?,java,android,Java,Android,我已经试着把这件事做好两天了,我准备扔掉一些东西 我在try/catch块中处理一个JSONArray,但它似乎没有在末尾传递变量 我的代码: try{ //Get the element that holds the results ( JSONArray ) JSONArray getresults = json.getJSONArray("results"); //Loop the Array for(int i=0;i < getresults.l

我已经试着把这件事做好两天了,我准备扔掉一些东西

我在try/catch块中处理一个JSONArray,但它似乎没有在末尾传递变量

我的代码:

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());                                       
}
试试看{
//获取保存结果的元素(JSONArray)
JSONArray getresults=json.getJSONArray(“结果”);
//循环数组
对于(inti=0;i
我已经尝试了在try/catch块之前、之中、之后声明变量的所有方法,但是我无法让它传递到我代码的其余部分


我做错了什么?

在外面宣布会解决问题:

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());                                      
}
JSONArray getresults=null;
试一试{
//获取保存结果的元素(JSONArray)
getresults=json.getJSONArray(“结果”);
//循环数组
对于(inti=0;i

你可以在外面申报。比如

JSONArray results = null;

try {
     results = json.getJSONArray("results");
}...
这样,您可以在外部访问它,但一定要使用if来查看它是否为null

如果不将
JSONArray results=null
放入,编译器可能会抱怨变量没有初始化

进一步解释:

发生这种情况是因为范围。在try中声明时,变量的作用域在try结束时结束。当您在if中声明时,当if结束时,该变量将无法再访问。这对于临时变量非常有用,因为您仅将它们用于比较或更好的代码可读性、内存重用等(idk,如果这是一个单词)。无论如何,如果您的变量需要在类中的任何地方访问,那么最好将其声明为字段


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

在块外声明变量并在块内赋值:

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 ...) {
    ...
}

Gabriel描述的方法是可行的,但使用这种方法,您可能会遇到
nullPointerException
。我宁愿这样做:

JSONArray results = new JSONArray();

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

您正在处理json,无论您在哪里声明,都必须在try-catch-block中声明在开始使用Android之前需要具备良好的java知识。考虑到1.7 java try-block,这个问题实际上更有趣。这是真的,但我说他应该检查变量是否为null。我认为这样更好,因为如果他没有得到任何结果,他想对外部变量做的任何事情都不应该做,毕竟他没有得到任何结果。谢谢!那正是我想要的。