Когда я разрабатываю приложение для Android, я хочу создать класс CrashReport, а затем использовать его для отправки отчета на мой сервер.
Я создаю класс с именем CrashHandler, который реализует UncaughtExceptionHandler, и создаю пример для вызова NullPointошибка в Activity в назначении , класс работает хорошо, но небольшая проблема ... в методе uncaughtException :
@Override
public void uncaughtException(Thread thread, Throwable ex) {
ex.printStackTrace(); //**code line 1**
....//some other codes and variables
StackTraceElement[] elements = ex.getStackTrace();
for (StackTraceElement element : elements) { // **code line 2**
errorString = errorString + "<br/>" + element.toString();
}
}
строка кода 1 вывести трассировку стека как:
java.lang.NullPointerException
my.app.ExceptionCaughtActivity$1.onClick(ExceptionCaughtActivity.java:25)
android.view.View.performClick(View.java:2486)
android.view.View$PerformClick.run(View.java:9130)
android.os.Handler.handleCallback(Handler.java:587)
android.os.Handler.dispatchMessage(Handler.java:92)
android.os.Looper.loop(Looper.java:130)
android.app.ActivityThread.main(ActivityThread.java:3703)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:507)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
dalvik.system.NativeStart.main(Native Method)
, нотолько строка кода показывает:
my.app.ExceptionCaughtActivity$1.onClick(ExceptionCaughtActivity.java:25)
android.view.View.performClick(View.java:2486)
android.view.View$PerformClick.run(View.java:9130)
android.os.Handler.handleCallback(Handler.java:587)
android.os.Handler.dispatchMessage(Handler.java:92)
android.os.Looper.loop(Looper.java:130)
android.app.ActivityThread.main(ActivityThread.java:3703)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:507)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
dalvik.system.NativeStart.main(Native Method)
вы заметили, что он не показывает:
"java.lang.NullPointerException"
Я знаю, что я не вызывал getCause (), но когда пытаюсь использовать getCause (), онвернуть значение null, а не throwable;
Я попытался просмотреть исходный код класса throwable ... но получил отметку
Можете ли вы сказать мне, почему getCause имеет значение null, но printStackTrace имеет ошибкупричина распечатать ??