java - 具有多个调用者方法的堆栈跟踪

标签 java android nullpointerexception crash callstack

当我的应用程序在现场崩溃时,我会得到这种堆栈跟踪,但我无法理解它的实际含义:

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.hideControlsAfterDelay$1349ef(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$2.onLoad(VideoPlayerActivity.java)
    at com.myapp.model.Moment$1.onLoad(Moment.java)
                                  onUpdate(Moment.java)
                                  onNeedsUpdate$2cf7ba29(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$3.onLoad(Moment.java)
    at com.myapp.model.FireDatabaseObject$1.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)

为什么我会在异常时获得可能的(?)调用者列表? 谁试图在 null 对象上调用 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 - 具有多个调用者方法的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48950158/

相关文章:

java - 为 Google Cloud Storage 对象生成公共(public)链接

java - Jboss7 中如何设置 crossContext 和 enptySessionPath?

java - 用 Switch 打击,降低圈复杂度 java

java - 如何获取最准确的用户位置

java - 编译器为类创建的所有成员有哪些?

android - 在flutter中的异步函数中捕获PlatformException

java - 如何在 Activity 中加载插页式广告并在另一个 Activity 中显示?

android - Facebook SDK 4.10 : Attempt to invoke interface method 'java.lang.Object com.facebook.inject.Lazy.get()' on a null object reference 上的 NPE

android - MediaPlayer 状态 4 错误

java - 如何实例化抽象类以删除 NullPointerException?