【问题标题】:java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.view.WindowInsets.isConsumed()' on a null object referencejava.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“boolean android.view.WindowInsets.isConsumed()”
【发布时间】:2019-04-02 12:50:30
【问题描述】:

我正在使用 UnityActivity 与 unity3d 合作。我有一个 MainActivity 启动 UnityActivity 的地方

    Intent unity = new Intent(this, UnityActivity.class);
    startActivity(unity);

UnityActivity 和 MainActivity 都是

launchMode="singleTask"

与unity合作后,我调用下面的代码

UnityActivity.this.finish();

我得到了错误:

    D/MainActivity(25562): onStart
    D/MainActivity(25562): onResume
    D/AndroidRuntime(25562): Shutting down VM
    E/AndroidRuntime(25562): FATAL EXCEPTION: main
    E/AndroidRuntime(25562): Process: ru.mdinc.mdinc, PID: 25562
    E/AndroidRuntime(25562): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.view.WindowInsets.isConsumed()' on a null object reference
    E/AndroidRuntime(25562):    at android.view.ViewGroup.dispatchApplyWindowInsets(ViewGroup.java:7077)
    E/AndroidRuntime(25562):    at android.view.ViewRootImpl.dispatchApplyInsets(ViewRootImpl.java:1670)
    E/AndroidRuntime(25562):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2083)
    E/AndroidRuntime(25562):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1468)
    E/AndroidRuntime(25562):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7208)
    E/AndroidRuntime(25562):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1004)
    E/AndroidRuntime(25562):    at android.view.Choreographer.doCallbacks(Choreographer.java:816)
    E/AndroidRuntime(25562):    at android.view.Choreographer.doFrame(Choreographer.java:751)
    E/AndroidRuntime(25562):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:990)
    E/AndroidRuntime(25562):    at android.os.Handler.handleCallback(Handler.java:873)
    E/AndroidRuntime(25562):    at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime(25562):    at android.os.Looper.loop(Looper.java:193)
    E/AndroidRuntime(25562):    at android.app.ActivityThread.main(ActivityThread.java:6762)
    E/AndroidRuntime(25562):    at java.lang.reflect.Method.invoke(Native Method)
    E/AndroidRuntime(25562):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    E/AndroidRuntime(25562):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

我没有覆盖WindowInsets的任何方法,所以不要放“你忘记初始化变量之前使用它”之类的链接

我希望 UnityActivity 将关闭并且 MainActivity 以之前的状态重新启动。

在使用 Vuforia 添加功能之前,该代码运行良好。

编辑:发现错误发生here

【问题讨论】:

    标签: android unity3d nullpointerexception


    【解决方案1】:

    我为我解决了这个问题。我在活动之前使用mUnityPlayer.pause()onPause()

    例如,我需要处理Service消息并关闭UnityActivity,所以我这样做:

    switch(message) {
        ...
        case "stop-unity": 
           mUnityPlayerPause(); //Pause the unity before activities onPause()
           isFinish = true; //field of UnityActivity class
           UnityActivity.this.finish(); //Stop activity
           break;
    }
    

    现在onPause()方法里面需要检查的是isPause动作:

    @Override 
    void onPause() {
        if (!isFinish) mUnityPlayer.pause(); //Pause unity only when it's system call 
        super.onPause();
    }
    

    【讨论】:

      【解决方案2】:

      我发现这次崩溃不是将 Unity Activity 嵌入到 Android 中,而是一个普通的 Unity 应用程序,调用了Application.Quit();,可能会发生这种崩溃。

      经过一番尝试,我发现这可能是一个 Unity 错误。 LTS 版本的 Unity(Unity2018.4 LTS) 构建一切正常,而 Unity 2018.3.1f1(64 位)版本构建导致此崩溃。

      尝试使用 LTS Unity 版本!希望能帮助任何在这里谷歌的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-24
        • 2017-06-02
        相关资源
        最近更新 更多