JSONObject将方法放入try块导致错误,但catch块未执行

时间:2014-10-06 15:56:37

标签: android json

这个问题让我有点疯狂,所以希望你们中的一个好人能指出我正确的方向。我正在尝试准备一个将从客户端传递到服务器的JSONObject。以下是有问题的方法:

private JSONObject getJsonParam(int id)
{
    JSONObject param = new JSONObject();
    try
    {
        param.put("functionCode", 50);
        param.put("id", id);
        return param;
    }
    catch (JSONException e)
    {
        e.printStackTrace();
    }
    catch (Throwable e)
    {
        e.printStackTrace();
    }
    return null;
}

我在调试模式下仔细跟踪了代码。在实际的方法中,我在JSONObject中放了更多的参数,直到我尝试插入id的最后一个param.put()方法都是如此。当这是当前的执行行时,我可以看到param变量,所有看起来都很好。然后当我执行step函数执行最后一次param.put调用时,它会跳转到return null语句。我在两个catch块中都放置了断点,似乎都没有执行。 (我添加了第二个catch块以确保没有其他throwable导致问题)。

任何想法会导致这种奇怪的行为?我甚至尝试重新安排看跌期权的顺序。它对特定的put调用没有任何问题,但只是return语句之前的最后一个。

我在Android / Java工作。

1 个答案:

答案 0 :(得分:1)

代码不会导致错误 - 您只是被编译器优化了两个return语句以使用相同的代码这一事实而被捕获。

在每种情况下,返回都是一些“当前值”,在一种情况下,当前值来自param变量,在另一种情况下,它是null。由于编译器只使用代码的一个副本,因此调试器无法正确确定正在执行的实际源代码行。