从另一个类引用时,Get Window抛出空指针异常

问题描述 投票:0回答:1

我正在Android Studio的Fragment中使用PDFViewer。在此处找到库:https://github.com/barteksc/AndroidPdfViewer

当我允许该库处理所有触摸事件时,该库工作正常,但是当发生onSingleTapConfirmed事件时,我想在我的活动(SingleTouchImageViewActivity)中隐藏系统工具栏。由于OnTouchListener在另一个类(DragPinchManager)中,因此无法引用Activity中的Window来标记全屏。我得到一个空指针异常。

2020-04-28 19:00:02.952 22265-22265/com.biggerbytes.gospeltruth E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.biggerbytes.gospeltruth, PID: 22265
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.Window.addFlags(int)' on a null object reference
    at com.biggerbytes.gospeltruth.SingleTouchImageViewActivity.hideSystemUI(SingleTouchImageViewActivity.java:1109)
    at com.biggerbytes.gospeltruth.SingleTouchImageViewActivity.runFullScreenCheck(SingleTouchImageViewActivity.java:900)
    at com.github.barteksc.pdfviewer.DragPinchManager.onSingleTapConfirmed(DragPinchManager.java:80)
    at android.view.GestureDetector$GestureHandler.handleMessage(GestureDetector.java:316)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7073)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

这是DragPinchManager中的代码:

@Override
public boolean onSingleTapConfirmed(MotionEvent e) {

    SingleTouchImageViewActivity stiva = new SingleTouchImageViewActivity();
    stiva.hideSystemUI();

这是SingleTouchImageViewActivity中的相应代码:

public void hideSystemUI() {
    FullScreenMode = true;
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    if(Build.VERSION.SDK_INT < 19) { // lower api
        getWindow().getDecorView().setSystemUiVisibility(View.GONE);
    } else {
        //for new api versions.
    //    View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        getWindow().getDecorView().setSystemUiVisibility(uiOptions);
    }

    toolbarTop.setVisibility(View.GONE);
    toolbarBottom.setVisibility(View.GONE);
}

如何修复nullPointerException并在SingleTapConfirmed上隐藏导航?谢谢!

java android nullpointerexception touch listener
1个回答
0
投票

正如@CommonsWare所说的,永远不要自己创建活动的实例。

此崩溃是因为您使用窗口对象,而您的活动没有窗口!

要解决此问题,请使用Intent启动您的活动

@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
    Intent i = new Intent(this, SingleTouchImageViewActivity.class);

    startActivity(i);
}

然后在onCreateSingleTouchImageViewActivity内部调用hideSystemUI方法

© www.soinside.com 2019 - 2024. All rights reserved.