2014-10-06 110 views
1

這個問題正在讓我有點瘋狂,所以希望你們中的一個好人可以指出我在正確的方向。我正在嘗試準備將從客戶端傳遞到服務器的JSONObject。以下是解決問題的方法:JSONObject放置方法在try塊導致錯誤,但catch塊沒有執行

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調用時,它跳轉到返回null語句。我已經在兩個catch塊中放置了斷點,並且看起來沒有被執行。 (我添加了第二個catch塊,以確保沒有其他throwable導致問題)。

任何想法會導致這種奇怪的行爲?我甚至嘗試重新安排看跌期權的順序。它對於特定的put調用沒有任何問題,而只是return語句之前的最後一個。

我正在從事Android/Java。

+0

你得到了什麼錯誤,pl發佈你的堆棧跟蹤 – 2014-10-06 16:02:45

+1

這可能是IDE的一個問題。通過在函數外部放置一個斷點並檢查它返回的內容,確保你的結果是JSONObject而不是null。 – 2014-10-06 16:06:43

+0

@PedroOliveira這確實是IDE的一個問題。當我按照你的建議做時,我發現該函數正在返回正確的JSONObject!謝謝!我想這意味着我浪費了很多時間來解決一個實際上不成問題的問題......哈哈 – user3478532 2014-10-06 16:16:42

回答

1

代碼不會導致錯誤 - 您只是被編譯器優化了兩個返回語句以使用相同的代碼這一事實所困擾。

在每種情況下,返回值都是某個「當前值」,在一種情況下,當前值來自param變量,而另一種情況下則爲空。由於編譯器僅使用代碼的一個副本,因此調試器無法正確地確定正在執行哪個實際的源代碼行。