2015-03-13 99 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」。