Java处理错误&;例外情况

Java处理错误&;例外情况,java,android,Java,Android,我有一个可以从internet下载文件的类: public String download(String URL) { try { if(somethingbad) { // set an error? return false; } } //... catch (SocketException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }

我有一个可以从internet下载文件的类:

public String download(String URL) {

try {
 if(somethingbad) {
  // set an error?
  return false; 
 }
}
//...
catch (SocketException e) {
 e.printStackTrace();
}
catch (UnsupportedEncodingException e) {
 e.printStackTrace();
}
catch (ClientProtocolException e) {
 e.printStackTrace();
}
catch(InterruptedIOException e) {
e.printStackTrace();
}
catch (IOException e) {
 e.printStackTrace();
}
}
现在,我在另一个类中调用这个函数,我想显示一条消息,帮助我找出为什么这个函数不起作用

我可以做什么来显示这样的内容

HTTPReq r = new HTTPReq("http://www.stack.com/api.json");    
if(r.err) {
 showMessage(getMessage());
}

如果url为空,则
getMessage()
将返回
SocketException
IOException
甚至“空url”。

不只是在catch块内执行e.printStackTrace(),而是像这样将异常抛出:

throw e;     
然后您可以像这样包围调用代码:

try {
    HTTPReq r = new HTTPReq("http://www.stack.com/api.json");
} catch (Exception e) {
    // Show error message
}

不要只在catch块中执行e.printStackTrace(),而是像这样抛出异常:

throw e;     
然后您可以像这样包围调用代码:

try {
    HTTPReq r = new HTTPReq("http://www.stack.com/api.json");
} catch (Exception e) {
    // Show error message
}

首先,我认为您不需要所有这些:

SocketException、UnsupportedEncodingException、ClientProtocolException,因为它们扩展了IOException

但如果您愿意,您可以这样做:

public String download(String URL) throws IOException, Exception {

    try {
        if(somethingbad) {
            throws new Exception("My Message);
        }
    }
    catch (IOException e) {
        throw e;
    }
}
然后在另一个文件中:

try {
    // some stuff
}
catch (Exception e) {
    // do something with e.getMessage();
}
catch (IOException e) {
    // do something with e.getMessage();
}

首先,我认为您不需要所有这些:

SocketException、UnsupportedEncodingException、ClientProtocolException,因为它们扩展了IOException

但如果您愿意,您可以这样做:

public String download(String URL) throws IOException, Exception {

    try {
        if(somethingbad) {
            throws new Exception("My Message);
        }
    }
    catch (IOException e) {
        throw e;
    }
}
然后在另一个文件中:

try {
    // some stuff
}
catch (Exception e) {
    // do something with e.getMessage();
}
catch (IOException e) {
    // do something with e.getMessage();
}

我只需要做:e.getMessage()来自我的另一个类??另外,如果
if(somethingbad){
失败,我将如何触发getMessage()?您必须修改下载方法的签名,以指示它使用throws子句抛出异常。IDE应该可以帮助您使用正确的语法。我使用的是android studio,但仍然没有得到它>,我只需要这样做:e.getMessage()从我的另一个类中??如果希望在catch块中获取消息,则可以。>另外,如果if(somethingbad)为{失败?什么设置somethingbad的值?如果download方法引发异常,控件将进入相应的catch块。该方法将不会继续执行。我只需执行:来自另一个类的e.getMessage()?另外,如果
If(somethingbad),我将如何触发getMessage(){
失败?您必须修改下载方法的签名,以指示它使用throws子句抛出异常。IDE应该可以帮助您使用正确的语法。我使用的是android studio,但仍然没有得到它>,我只会这样做:e.getMessage()从我的另一个类中??如果希望在catch块中获取消息,您可以。>另外,如果if(somethingbad){失败,我如何触发getMessage()?什么设置somethingbad的值?如果下载方法引发异常,控件将进入相应的catch块。该方法将不会继续执行。catch(IOException)应在catch(Exception)之前。否则,IOException将进入第一个catch块。catch(IOException)应在catch(Exception)之前。否则,IOException将进入第一个catch块。