我在java中有一个小函数来执行HTTP POST,并返回一个JSON对象。此函数返回JSON对象。
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 :(得分: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;
从方法中抛出异常(如果选择此选项,则需要将throws
添加到send_data
的声明中。
public JSONObject send_data(ArrayList<NameValuePair> params) throws Exception {
return new JSONObject(CustomHttpClient.executeHttpPost(URL, params).toString());
}
答案 1 :(得分: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;
}
答案 2 :(得分:0)
通过该函数的路径不会返回任何内容;编译器不喜欢这样。
您可以将其更改为
catch(Exception e) {
// do smthng
return null; <-- added line
}
or put the return null (or some reasonable default value) after the exception block.
答案 3 :(得分:0)
即使在错误的情况下也可以返回'某事'。 查看JSend,了解标准化答案的方法 - http://labs.omniti.com/labs/jsend
在我看来,返回一个错误的json对象并在客户端处理它然后完全依赖于HTTP错误代码是最容易的,因为并非所有框架都能处理这些错误代码。
答案 4 :(得分: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;
}
答案 5 :(得分: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());
}
}