Java 如何从try/catch块中获取变量?
我已经试着把这件事做好两天了,我准备扔掉一些东西 我在try/catch块中处理一个JSONArray,但它似乎没有在末尾传递变量 我的代码: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{
//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。我认为这样更好,因为如果他没有得到任何结果,他想对外部变量做的任何事情都不应该做,毕竟他没有得到任何结果。谢谢!那正是我想要的。