有时,以下代码会导致Android应用崩溃:
try {
(new Date()).toString());
} catch (Exception ex) {
...
}
堆栈跟踪:
java.lang.AssertionError:
at android.icu.impl.TimeZoneNamesImpl$ZNames.getNameTypeIndex (TimeZoneNamesImpl.java:724)
at android.icu.impl.TimeZoneNamesImpl$ZNames.getName (TimeZoneNamesImpl.java:790)
at android.icu.impl.TimeZoneNamesImpl.getTimeZoneDisplayName (TimeZoneNamesImpl.java:183)
at android.icu.text.TimeZoneNames.getDisplayName (TimeZoneNames.java:261)
at java.util.TimeZone.getDisplayName (TimeZone.java:405)
at java.util.Date.toString (Date.java:1066)
显然,该错误无法捕获。有办法防止这种情况吗?
答案 0 :(得分:2)
如果您使用 new Date()收到了AssertionError,这似乎很奇怪,并且可能与 Android 8 问题(而非代码)有关,则可以使用 Java 8 >> java.time 代替 java.util.Date ,如下所示:
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("yyyy/MM/dd HH:mm:ss")
.withZone(ZoneId.systemDefault()); //you must add time zone because of Instant
Instant currentTimestamp = Instant.now();
System.out.print(formatter.format(currentTimestamp));
答案 1 :(得分:1)
非常奇怪的问题...
顺便说一句,没有引发异常,而是从Select Case x
Case 1
'case 1 code
Case 2
'case 2 code
Case 3
'case 3 code
Case 4
'case 4 code
Case 5
'case 5 code
Case9Code()
Case 6
'case 6 code
Case 7
'case 7 code
Case 8
'case 8 code
Case 9
Case9Code()
End Select.
延伸过来的AssertionError
。
您可以使用:
Error