我正在尝试编写一个可以尝试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”为假。
我做错了什么?
答案 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 NullPointerException
,JSONException
,NumberFormatException
等等。如果存在自定义的特定可能原因或异常原因,那么请创建自定义异常类,并在必要时将其抛出以尽可能精确地标记问题。
它将让调用者正确处理此错误或进一步抛出此异常。
通常,这种方法可以使您的应用程序更加一致和易于管理。
答案 3 :(得分:0)
这是不可能的。我认为try块是在没有抛出异常的情况下执行的,因此必须返回return语句。否则您的代码可能无法正确构建。