Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LoopJ AndroidAsyncHttp的onFailure中引发异常_Java_Android Async Http - Fatal编程技术网

Java LoopJ AndroidAsyncHttp的onFailure中引发异常

Java LoopJ AndroidAsyncHttp的onFailure中引发异常,java,android-async-http,Java,Android Async Http,已编辑 我有一个自定义的异常类MyException public class MyException extends RunTimeException{ public MyException() { super(); } public MyException(String message) { super(message); } public MyException(Exception e) {

已编辑

我有一个自定义的异常类MyException

public class MyException extends RunTimeException{

    public MyException()
    {
       super();
    }

    public MyException(String message)
    {
        super(message);
    }

    public MyException(Exception e)
    {
        super(e);
    }
}
现在,每当引发异常时,我都会在MyException中捕获它,并将其返回到父函数。我在使用AsyncHttpClient时遇到了一个问题,它在onFailure中引发了一个由服务器引发的异常

这就是我发出HTTP请求并尝试处理异常的方式

AsyncHttpClient client = new AsyncHttpClient();

    client.setTimeout(TIMEOUT);

    try {
        client.post(mainActivity,
                PATH, new StringEntity(requiredDataForRequest),
                "application/json", new AsyncHttpResponseHandler() {

                    @Override
                    public void onSuccess(String response) {

                    }

                    @Override
                    public void onFailure(int arg0, Header[] arg1,
                            byte[] arg2, Throwable e) throws MyException {
                        throw new MyException("Error Description Here!");
                    }

                });
    } catch (MyException e) {
        log.debug("Exception: " + e.getMessage());
    }

现在它正在抛出新的MyException并在捕获块中无法捕获我的应用程序。任何想法或帮助都将不胜感激。

因为
onFailure
的定义没有指定它抛出任何东西,这意味着它的任何实现都不能抛出已检查的异常。您可以通过扩展
RuntimeException
来更改
MyException
,但由于它是一个运行时异常,
onFailure
的任何调用方都不需要捕获该异常。如果您是这个类的唯一用户,只要您记得自己捕获异常就可以了。

您在这里缺少基本的java概念,您在onFailure()中添加了一个throw子句,但是原始方法定义不知道在抛出某个异常时该怎么办

基本上,当您使用throw关键字并抛出异常时,必须在调用方法的位置捕获该异常

现在,由于您正在重写onFailure(),并且AsyncHttpClient没有MyException类的catch(),因此它根本没有被捕获

如果希望捕获它,请在onFailure()中的try-catch块中编写抛出

这将在捕获抛出的异常时起作用

接下来,在你的情况下,你打电话

try {
 client.post(///);
} catch (MyException e) {
  // exception caught
}
现在要捕获异常,它必须由
client.post
方法调用抛出

如果你看看post方法

public RequestHandle post(android.content.Context context,
                 java.lang.String url,
                 org.apache.http.HttpEntity entity,
                 java.lang.String contentType,
                 ResponseHandlerInterface responseHandler)
它不会扔任何东西!所以你的异常永远不会被调用


如果你想捕获一些东西,你要么修改库

我尝试将MyException扩展到RuntimeException,但无法捕获它。Eclipse甚至没有提示我添加try-catch块。虽然我已经在父函数周围手动添加了try/catch块,但没有任何用处。您可以很好地捕获它,只是不需要这样做(因为这是一个运行时异常)。请注意,这将引发一个异常,
onFailure
的调用方需要捕获该异常。如果不是你,抛出异常将不会调用任何catch语句。你能告诉我谁是onFailure的调用方吗?我用谷歌搜索了一下,但找不到答案。我是新手。写另一个抛出异常的方法!你能详细说明一下吗?既然我已经添加了throw new RuntimeException,为什么还要创建一个函数来抛出RuntimeException呢?我已经为MyException添加了catch块,您可以看到更新后的问题。请在这里编写代码段好吗?你没有抓住要点,在catch块中你可以使用client.post,现在post方法在内部调用onFailure和onSuccess,现在在onFailure中你抛出一个异常,但是onFailure不知道如果抛出异常该怎么办,所以它现在会将异常传递给client.post()调用,你的试块永远也抓不到它!那么在哪里添加呢?这是我的问题。在何处添加捕捉块。。。请给我指出来。如果你能在你的答案中重新编写我的代码,那就太好了。谢谢,我想要的,是无法实现的。这就是你想说的,对吗?我不能将onFailure的异常重新抛出给它的父级?
public RequestHandle post(android.content.Context context,
                 java.lang.String url,
                 org.apache.http.HttpEntity entity,
                 java.lang.String contentType,
                 ResponseHandlerInterface responseHandler)