0

我使用以下函数调用

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

但是我在 IDE 中得到了一个 JsonException,所以我什至无法编译它。主题将是从 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() 中删除 throws JSONException 子句。

不需要捕获运行时异常。

于 2012-07-18T00:11:17.343 回答