2012-07-11 10 views
6

私はこの権利を2日間取得しようとしていて、何かを投げる準備ができています.....try/catchブロックから変数を取得するにはどうすればよいですか?

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

私は、try/catchブロックの後に、前に変数を宣言するすべての荘園を試みたが、私はちょうどそれが私のコードの残りの部分に渡すことができません。

私は間違っていますか?それは外の問題を解決するだろう宣言

+0

あなたはjsonを扱っていますが、try catchブロックで宣言しなければならない場合は、 – AkashG

+0

jsonデータを投稿できますか? – Suresh

+2

Javaのスコープについて読む! – hsz

答えて

8

うーん...

あなたが外でそれを宣言することができます。次のようになります。

JSONArray results = null; 

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

このようにして外部にアクセスできますが、ifを使用してnullであるかどうかを確認してください。

JSONArray results = nullを入れないと、コンパイラはおそらく初期化されていない変数について泣きそうになります。

さらなる説明:

これは範囲で起こります。 try内で宣言すると、tryの終了時に変数のスコープが終了します。 if内部で宣言すると、ifが終了すると、変数にはもうアクセスできなくなります。これは、比較やコードの読みやすさ、メモリの再利用などのためにのみ使用する一時変数の場合に非常に便利です(これは単語でもidkです)。とにかく、変数がクラス内のどこにでもアクセスされる必要がある場合は、フィールドとして宣言する方が良いかもしれません。

私はthis explanationを読まなかったが、それは良いようだ。見てみましょう。

+0

ありがとう!それは私が探していたものだった。 – user1517838

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

セミコロンがありません。 –

+0

ねえ...ありがとう! –

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に実行できます。

+1

これは当てはまりますが、変数がnullかどうかを確認する必要があります。なぜなら、結果が得られないと、変数を外部変数としたいと思っても、何も結果が得られないからです。 –

+1

そうですね:-) –

関連する問題