使用try-catch - 跳过尝试

时间:2013-07-31 10:20:27

标签: java android try-catch

我正在尝试编写一个可以尝试JSON对象的代码,如果格式错误,请以某种方式通知用户。

代码是:

 public boolean sjekkSporingsNummer (JSONObject object){       //object is passed correct
    Boolean riktigSporing = null; 
    riktigSporing = true;                                     //riktig sporing is set to true
    //if its true the json is correct
    try {
    JSONArray consignmentSet = object.getJSONArray("consignmentSet");
    JSONObject object1 = consignmentSet.getJSONObject(0);
    riktigSporing = true;
    }catch (Exception e){                                 //skips straigt to here
        e.printStackTrace();
        riktigSporing = false;
    }
    return riktigSporing;

如果失败了以后:

07-31 12:34:07.243  15479-15479/com.example.posten E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.NullPointerException

对我来说似乎很奇怪的是,我的应用程序会跳过尝试并直接进入返回声明。

我希望它尝试并将其设置为“riktigSporing”为假。

我做错了什么?

4 个答案:

答案 0 :(得分:2)

我敢打赌它没有。我怀疑你的输入参数是null,你很早就触发了NPE。

另请注意,您可以将null拆分为原始boolean,但这不起作用。

编辑:

FATAL EXCEPTION: main
java.lang.NullPointerException

进一步表明了这一点。您应该在堆栈跟踪中有相应的行号。

答案 1 :(得分:1)

你需要在这个catch中设置你的布尔值:

catch (JSONException e) {
        e.printStackTrace();
        riktigSporing = false;
    }

如果JSON出现一些错误,将调用此catch,而不是第二个。我认为在你的情景中你不需要第二次捕获。

如果您想一般使用Exception,请移除JSONException,只留下Exception

注意:当我查看你的代码片段时,我建议你使用boolean作为原始数据类型而不是布尔值。它会更清晰有效。

答案 2 :(得分:1)

很可能你在try块的第一行得到了一个异常。

我认为有一种更好的方法来编写这种方法。不要使用布尔值来显示此方法执行的成功程度。如果此方法执行正常,则不返回任何内容。但如果执行时出现错误,请抛出特定于您所遇到的错误的异常。

尽可能避免使用常规异常类。使用特定于导致问题的情景的异常类。 I.e NullPointerExceptionJSONExceptionNumberFormatException等等。如果存在自定义的特定可能原因或异常原因,那么请创建自定义异常类,并在必要时将其抛出以尽可能精确地标记问题。

它将让调用者正确处理此错误或进一步抛出此异常。

通常,这种方法可以使您的应用程序更加一致和易于管理。

答案 3 :(得分:0)

这是不可能的。我认为try块是在没有抛出异常的情况下执行的,因此必须返回return语句。否则您的代码可能无法正确构建。