java.lang.NullPointerException: попытка вызвать виртуальный метод 'boolean android.view.WindowInsets.isConsumed ()' для ссылки на пустой объект - PullRequest
1 голос
/ 02 апреля 2019

Я работаю с unity3d, используя UnityActivity. У меня есть MainActivity, где запускается UnityActivity по

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

UnityActivity и MainActivity равны

launchMode="singleTask"

После работы с единицей, я вызываю код ниже

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 этот код работал нормально.

РЕДАКТИРОВАТЬ: обнаружил, что ошибка происходит здесь

1 Ответ

0 голосов
/ 12 апреля 2019

Я исправил это для меня.Я использую mUnityPlayer.pause() ПЕРЕД действиями onPause().

Например, мне нужно обработать служебное сообщение и закрыть 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...