2011-10-20 55 views
2

我在java中有一個小功能,它執行HTTP POST並返回一個JSON對象。這個函數返回JSON對象。java試試趕上並返回

public JSONObject send_data(ArrayList<NameValuePair> params){ 
    JSONObject response; 
    try { 
     response = new JSONObject(CustomHttpClient.executeHttpPost(URL, params).toString()); 
     return response; 
    } catch(Exception e) { 
     // do smthng 
    } 
} 

這顯示我的錯誤,該函數必須返回一個JSONObject。我如何使它工作?出現錯誤時我無法發送JSONObject,可以嗎?發送一個空白的jsonobject是沒用的

回答

0

有一個通過函數的路徑不返回任何東西;編譯器不喜歡那樣。

您可以將其更改爲

catch(Exception e) { 
    // do smthng 
    return null; <-- added line 
} 
or put the return null (or some reasonable default value) after the exception block. 
10

這是因爲你只返回一個JSONObject,如果一切進展順利。但是,如果拋出異常,您將輸入catch塊,並且不會從該函數返回任何內容。

你需要或者

  • 返回在catch塊的東西。例如:

    //... 
    catch(Exception e) { 
        return null; 
    } 
    //... 
    
  • 返回catch塊後的內容。例如:

    //... 
    catch (Exception e) { 
        //You should probably at least log a message here but we'll ignore that for brevity. 
    } 
    return null; 
    
  • 拋出異常的方法的(如果你選擇了這個選項,你將需要添加throwssend_data聲明)。

    public JSONObject send_data(ArrayList<NameValuePair> params) throws Exception { 
        return new JSONObject(CustomHttpClient.executeHttpPost(URL, params).toString()); 
    } 
    
+0

Just semantics ... but catch -loop-? – Shaded

+0

catch塊。該捕獲不是一個循環! – DwB

+1

@Shaded,DwB哎呀。感謝您的支持。 –

2

你可以把它改成這樣:

public JSONObject send_data(ArrayList<NameValuePair> params){ 
    JSONObject response = null; 
    try { 
     response = new JSONObject(CustomHttpClient.executeHttpPost(URL, params).toString()); 
    } catch(Exception e) { 
     // do smthng 
    } 

    return response; 
} 
0

這是講理的返回即使是在一個錯誤條件 '東西'。 看JSEND一種方式來規範你的反應 - http://labs.omniti.com/labs/jsend

在我看來這是最簡單的返回一個錯誤的JSON對象並處理在客戶端則僅僅依靠HTTP錯誤代碼,因爲不是所有的框架處理這些以及他們可以。

0

我更喜歡一個入口和一個出口。像這樣的東西似乎是合理的對我說:

public JSONObject send_data(ArrayList<NameValuePair> params) 
{ 
    JSONObject returnValue; 
    try 
    { 
     returnValue = new JSONObject(CustomHttpClient.executeHttpPost(URL, params).toString()); 
    } 
    catch (Exception e) 
    { 
     returnValue = new JSONObject(); // empty json object . 
     // returnValue = null; // null if you like. 
    } 

    return returnValue; 
} 
0

send_data()方法應該拋出一個異常,這樣的代碼調用send_data()擁有它要如何處理異常控制。

public JSONObject send_data(ArrayList<NameValuePair> params) throws Exception { 
    JSONObject response = new JSONObject(CustomHttpClient.executeHttpPost(URL, params).toString()); 
    return response; 
} 

public void someOtherMethod(){ 
    try{ 
    JSONObject response = sendData(...); 
    //... 
    } catch (Exception e){ 
    //do something like print an error message 
    System.out.println("Error sending request: " + e.getMessage()); 
    } 
}