2015-03-13 131 views
1

我写了一个方法来创建一个JSONObject,用于工作。突然间我表现得很奇怪。通过调试器,我可以到达返回创建的JSONObject的那一行,但它总是跳转到返回null的最后一行,而不会去执行catch块。调试器告诉我,创建的对象是一个有效的JSONObject。return语句在调试时被忽略

import org.json.JSONObject; 

... 

JSONObject returnJson = new JSONObject(); 
    try { 
     returnJson.put("event", event); 
     returnJson.put("list", jsonArray); 
     returnJson.put("type", "list"); 
     returnJson.put("container", container); 
     Log.d(TAG, "created"); 
     Log.d(TAG, returnJson.toString()); 
     return returnJson; 
    } catch (JSONException e) { 
     Log.e(TAG, e.getMessage(), e); 
    } 
    Log.d(TAG, "null returned"); // never called in the non-debugging mode 
    return returnJson; 
+2

它能正常工作*不在调试器中吗?也许调试器的工作源与类文件不同步...... – 2015-03-13 11:32:47

+0

我不这么认为。因为我无法调试,我只能猜测,但该项目的行为就像没有返回json对象一样。无论如何,我清除所有缓存并重新启动,我无法修复任何可能的不同步问题。 – richard 2015-03-13 11:35:08

+2

那么你可以很容易地添加*日志记录*来查看它没有调试到底有多远...... – 2015-03-13 11:35:44

回答

1

我想它并没有打到最后的return returnJson;而是前者。我的意思是try块内的代码确实是而不是抛出异常。

我目睹了return语句的调试器中断,在某些情况下实际上并未命中,但我并不清楚。

我刚写的示例代码重现:

private static String method() { 
    try { 
     Class clazz = AnyClass.class; 
     return clazz.getName();  // place a break point #1 
    } catch(Exception ignored) { } 

    String result = "An exception caught."; 
    return result;     // place another break point #2 
} 

它必将打破在#1 ,然后 “停” 在#2了。这个方法实际上返回“package.name.AnyClass”。