0

を使用して次の関数を呼び出しています

String subjects = callWebService(query);
DisplaySubjects(subjects);

しかし、IDEでJsonExceptionが発生するため、コンパイルすることさえできません。subject は、Ws から返された有効な Json 文字列になります。(テスト済み)

public void displaySubjects(String subjects) throws JSONException 
{
    try 
    {
        ArrayList<String> stringArray = new ArrayList<String>();
        JSONArray jsonArray = new JSONArray(subjects);
            for (int i = 0; i < jsonArray.length(); i++) 
            {
                stringArray.add(jsonArray.getString(i));
            }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, android.R.id.text1, stringArray);


        setListAdapter(adapter);

    } 
    catch (JSONException e) 
    {
        throw new RuntimeException(e);
    }
}

そして、私はなぜわからないのですか?

編集: コンパイルに行くと、発信者行でこのエラーが発生します: エラー: 報告されていない例外 JSONException; キャッチするか、スローすることを宣言する必要があります。しかし、私はそれを正しくやっていますか?

4

1 に答える 1

0

displaySubjects() メソッドは、チェック済み例外のサブクラスである (おそらく疑わしい) JSONException をスローしています。これは、このメソッドの呼び出し元がこの例外をキャッチする必要があることを意味します。つまり、try{}catch で囲むか、displaySubjects() から伝播されたこの例外をスローします。 )。

たとえば、別のメソッドからこれを呼び出していた場合は、次のようになります。

public void displayControl(String json){
  try{
    displaySubjects(json);
  }catch(JSONException){
    // do something
  }
}

または、その例外をスローすることもできます。

public void displayControl(String json) throws JSONException{
  displaySubjects(json);
}

これに加えて、displaySubjects() メソッドが JSONException の発生をキャッチし、実行時例外として再スローすることに気付きました。これにより、実際には、displaySubjects() から JSONException を明示的にスローする必要がなくなります。したがって、内部から JSONException をキャッチして実行時例外として再スローすることが意図的でない場合を除き、displaySubjects() から JSONException 句をスローすることを取り除くことができます。

実行時例外をキャッチする必要はありません。

于 2012-07-18T00:11:17.343 に答える