Java 从getMessage()处理有关其消息的异常
在Android平台上处理来自getMessage()的异常消息是否是一种良好的做法 在我的android应用程序中,我有以下类:Java 从getMessage()处理有关其消息的异常,java,android,android-studio,exception,Java,Android,Android Studio,Exception,在Android平台上处理来自getMessage()的异常消息是否是一种良好的做法 在我的android应用程序中,我有以下类: public class Test { boolean alreadyTried; public Test() { alreadyTried = false; } private void doTest() { try { downloadPictureFromServe
public class Test {
boolean alreadyTried;
public Test() {
alreadyTried = false;
}
private void doTest() {
try {
downloadPictureFromServer(); //uses okhttp3
} catch (Exception e) {
if(e.getMessage() != null && e.getMessage().contains("Connection reset by peer")){
//try again (only once)
if(alreadyTried) {
Log.e("Test", "Connection reset by peer repeatedly, cannot communicate with the server");
} else {
Log.e("Test", "Connection reset by peer, trying to communicate with the server again...");
alreadyTried = true;
doTest(); //try again
}
} else {
throw e;
}
}
}
}
调用doTest()时,它开始与Tomcat服务器上运行的web应用程序通信,有时会引发以下异常:
javax.net.ssl.SSLHandshakeException:ssl握手中止:ssl=0x7653281108:系统调用期间发生I/O错误,对等方重置连接
这不太可能发生,但在服务器重新启动时可能发生。。。在测试过程中,我已经不止一次遇到过这种情况
那么,我可以使用该消息并安全地检查它是否包含“由对等方重置连接””字符串吗?或者getMessage()中的消息是否可能使用与英语不同的语言
我试图查找此信息,但我在任何地方都找不到。。。我想确定它是好的处理它像在这个例子中,并冷静我的头脑。我还尝试将android设备中的语言改为德语或捷克语,但异常信息仍然是英语,这是一个好迹象
更新:
关于Stephen C答案,我将if条件更改为:
if(e instanceof SSLHandshakeException) {
//try again (only once)
...
}
关于异常,这并不是很具体,但使用起来更安全。不,程序通常不想尝试取消选中异常中的消息字符串 问题:
- 异常字符串可以国际化1。正确的方法是覆盖可丢弃的.getLocalizedMessage,但也可以将主要异常消息国际化;e、 g.在构造异常之前。后者可能会给消息解析带来问题
- 异常字符串可能会从一个Java(tm)或Android平台版本更改为下一个版本。一般来说,这被认为是一个不足以在发行说明中注明的重大变化,等等。因此,解析异常消息的代码很容易变得脆弱
- 为处理程序需要区分的情况添加异常子类
- 定义自定义异常字段以保存处理程序可能必须提取的值
1-关于这是否是一个好主意,有不同的“思想流派”