具有多个调用方方法的堆栈跟踪
stack trace with multiple caller methods
当我的应用程序在现场崩溃时,我得到了这种堆栈跟踪,但我无法理解它的实际含义:
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object com.myapp.model.DatabaseObject.a(java.lang.String)' on a null object reference
at com.myapp.video.VideoController.hideControlsAfterDelay49ef(VideoController.java)
setVideoView(VideoController.java)
playClip(VideoController.java)
playClipAtIndex(VideoController.java)
playUrl(VideoController.java)
updateDownloadButton(VideoController.java)
stringForTimeOffset(VideoController.java)
handleScrubMove(VideoController.java)
animateShowHide(VideoController.java)
at com.myapp.video.VideoPlayerActivity.onLoad(VideoPlayerActivity.java)
at com.myapp.model.Moment.onLoad(Moment.java)
onUpdate(Moment.java)
onNeedsUpdatecf7ba29(Moment.java)
at com.myapp.model.Moment.notifyListeners(Moment.java)
at com.myapp.model.Moment.getKey(Moment.java)
setValueForKey(Moment.java)
valueForKeyPath(Moment.java)
write(Moment.java)
addClick(Moment.java)
at com.myapp.model.Moment.onLoad(Moment.java)
at com.myapp.model.FireDatabaseObject.onDataChange(FireDatabaseObject.java)
at com.google.firebase.database.zzp.onDataChange(zzp.java)
at com.google.android.gms.internal.zzegf.zza(zzegf.java)
zzc(zzegf.java)
zzbvp(zzegf.java)
at com.google.android.gms.internal.zzeia.zzbyc(zzeia.java)
at com.google.android.gms.internal.zzeig.run(zzeig.java)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
为什么在异常点我会得到一个可能的(?)来电者列表?
谁试图在空对象上调用 com.myapp.model.DatabaseObject.a()?
它是 hideControlsAfterDelay$1349ef()、setVideoView()、playClip() 还是列出的其他任何一个?
因为 hideControlsAfterDelay$1349ef() 根本不调用 com.myapp.model.DatabaseObject.a:
void hideControlsAfterDelay(long delay) {
cancelHideControls();
mHideControlsTimer = new Timer();
mHideControlsTimer.schedule(new TimerTask() {
@Override
public void run() {
if (getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
animateShowHide(false);
mHideControlsTimer = null;
}
});
}
}
}, delay);
}
对于这些方法中的任何一个都是一样的,所以这是怎么回事?
请注意,我不是在询问空指针异常,我可以处理我的编码错误,我是在询问堆栈跟踪的形状:为什么在同一级别列出了几个方法堆栈跟踪?
感谢您对此有所启发。
因为方法名称已被混淆,它向您显示了堆栈跟踪中每一行的所有可能的原始方法名称。
当我的应用程序在现场崩溃时,我得到了这种堆栈跟踪,但我无法理解它的实际含义:
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object com.myapp.model.DatabaseObject.a(java.lang.String)' on a null object reference
at com.myapp.video.VideoController.hideControlsAfterDelay49ef(VideoController.java)
setVideoView(VideoController.java)
playClip(VideoController.java)
playClipAtIndex(VideoController.java)
playUrl(VideoController.java)
updateDownloadButton(VideoController.java)
stringForTimeOffset(VideoController.java)
handleScrubMove(VideoController.java)
animateShowHide(VideoController.java)
at com.myapp.video.VideoPlayerActivity.onLoad(VideoPlayerActivity.java)
at com.myapp.model.Moment.onLoad(Moment.java)
onUpdate(Moment.java)
onNeedsUpdatecf7ba29(Moment.java)
at com.myapp.model.Moment.notifyListeners(Moment.java)
at com.myapp.model.Moment.getKey(Moment.java)
setValueForKey(Moment.java)
valueForKeyPath(Moment.java)
write(Moment.java)
addClick(Moment.java)
at com.myapp.model.Moment.onLoad(Moment.java)
at com.myapp.model.FireDatabaseObject.onDataChange(FireDatabaseObject.java)
at com.google.firebase.database.zzp.onDataChange(zzp.java)
at com.google.android.gms.internal.zzegf.zza(zzegf.java)
zzc(zzegf.java)
zzbvp(zzegf.java)
at com.google.android.gms.internal.zzeia.zzbyc(zzeia.java)
at com.google.android.gms.internal.zzeig.run(zzeig.java)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
为什么在异常点我会得到一个可能的(?)来电者列表? 谁试图在空对象上调用 com.myapp.model.DatabaseObject.a()?
它是 hideControlsAfterDelay$1349ef()、setVideoView()、playClip() 还是列出的其他任何一个?
因为 hideControlsAfterDelay$1349ef() 根本不调用 com.myapp.model.DatabaseObject.a:
void hideControlsAfterDelay(long delay) {
cancelHideControls();
mHideControlsTimer = new Timer();
mHideControlsTimer.schedule(new TimerTask() {
@Override
public void run() {
if (getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
animateShowHide(false);
mHideControlsTimer = null;
}
});
}
}
}, delay);
}
对于这些方法中的任何一个都是一样的,所以这是怎么回事?
请注意,我不是在询问空指针异常,我可以处理我的编码错误,我是在询问堆栈跟踪的形状:为什么在同一级别列出了几个方法堆栈跟踪?
感谢您对此有所启发。
因为方法名称已被混淆,它向您显示了堆栈跟踪中每一行的所有可能的原始方法名称。