我有一个允许从互联网上下载文件的课程:
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());
}
并且getMessage()
将返回SocketException
或IOException
或甚至"空网址"如果网址为空。
答案 0 :(得分:2)
不是只在catch块中执行e.printStackTrace(),而是像这样抛出异常:
throw e;
然后您可以像这样包围调用代码:
try {
HTTPReq r = new HTTPReq("http://www.stack.com/api.json");
} catch (Exception e) {
// Show error message
}
答案 1 :(得分:2)
首先,我认为你不需要所有这些:
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();
}