java尝试捕获并返回

Posted

技术标签:

【中文标题】java尝试捕获并返回【英文标题】:java try catch and return 【发布时间】:2011-10-20 19:22:08 【问题描述】:

我在 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是没有用的

【问题讨论】:

【参考方案1】:

这是因为如果一切顺利,您只会返回 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());

【讨论】:

捕获块。 catch 不是循环! @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;

【讨论】:

【参考方案3】:

函数中有一条不返回任何内容的路径;编译器不喜欢这样。

你可以改成

catch(Exception e) 
    // do smthng
    return null; <-- added line

or put the return null (or some reasonable default value) after the exception block.

【讨论】:

【参考方案4】:

即使在错误情况下也可以返回“某物”。 查看 JSend 以了解标准化您的回复的方法 - http://labs.omniti.com/labs/jsend

在我看来,最简单的方法是返回一个错误 json 对象并在客户端进行处理,然后完全依赖 HTTP 错误代码,因为并非所有框架都尽可能地处理这些错误代码。

【讨论】:

【参考方案5】:

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());
  

【讨论】:

【参考方案6】:

我更喜欢一进一出。这样的事情在我看来是合理的:

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;

【讨论】:

以上是关于java尝试捕获并返回的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 Bash 只读变量捕获输出无法捕获返回码 $?

Laravel validate() 捕获错误并使用 POST 方法返回奇怪的响应。使用 Postman 进行测试

如何处理尝试捕获异常android

尝试/最终没有捕获和返回值[重复]

Redux,Fetch,如何捕获 json()

返回类型与 Asynctask 不兼容