Android Studio : Attempt to invoke virtual method 'void android.view.View.setOnClickListener' on a null object reference

标签 android android-camera2

我不断收到 NullPointerException。

Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

我知道这是因为 (SurfaceView)view.findViewById(R.id.surfaceview_show_rectangle) 为空,但我不明白为什么会这样以及如何解决。

我试过这个solution 。但没有成功。 下面是我的 Fragment.java 和 xml 文件。

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_camera2_basic, container, false);
        surfaceview = (SurfaceView)view.findViewById(R.id.surfaceview_show_rectangle);
        return view;

    }


    @Override
    public void onViewCreated(final View view, Bundle savedInstanceState) {

        view.findViewById(R.id.picture).setOnClickListener(this);
        view.findViewById(R.id.info).setOnClickListener(this);

        mTextureView = (AutoFitTextureView) view.findViewById(R.id.texture);
        //view.findViewById(R.id.surfaceview_show_rectangle).setOnClickListener(this);


        //surfaceview = (SurfaceView)view.findViewById(R.id.surfaceview_show_rectangle);
        surfaceview.setZOrderOnTop(true);  
        surfaceview.getHolder().setFormat(PixelFormat.TRANSPARENT);  
        surfaceHolder = surfaceview.getHolder(); 


        surfaceview_result = (SurfaceView)view.findViewById(R.id.surfaceview_show_result);
        surfaceview_result.setZOrderOnTop(true);  
        surfaceview_result.getHolder().setFormat(PixelFormat.TRANSPARENT);  
        surfaceResultHolder = surfaceview_result.getHolder(); 
    }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <SurfaceView
        android:id="@+id/surfaceview_show_rectangle"
        android:layout_width="match_parent"
        android:layout_height="483dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="0dp"
        android:layout_marginTop="0dp"
        />

    <SurfaceView
        android:id="@+id/surfaceview_show_result"
        android:layout_width="match_parent"
        android:layout_height="483dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="0dp"
        android:layout_marginTop="0dp" />

    <com.example.android.camera2basic.AutoFitTextureView
        android:id="@+id/texture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="0dp"
        android:layout_marginTop="0dp" />

    <FrameLayout
        android:id="@+id/control"
        android:layout_width="match_parent"
        android:layout_height="112dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"
        android:background="@color/control_background">

        <Button
            android:id="@+id/picture"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:visibility="invisible"
            android:text="@string/picture" />

        <ImageButton
            android:id="@+id/info"
            android:contentDescription="@string/description_info"
            style="@android:style/Widget.Material.Light.Button.Borderless"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|right"
            android:padding="20dp"
            android:visibility="invisible"
            android:src="@drawable/ic_action_info" />

    </FrameLayout>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="69dp"
        android:layout_marginBottom="37dp"
        android:text="Camera2Dome"
        android:textColor="#fff"
        android:textSize="35sp" />

</RelativeLayout>


以下是我的错误消息。

D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.android.camera2basic, PID: 9168
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.camera2basic/com.example.android.camera2basic.CameraActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.SurfaceView.setZOrderOnTop(boolean)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2429)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493)
        at android.app.ActivityThread.access$1000(ActivityThread.java:150)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5444)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:746)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.SurfaceView.setZOrderOnTop(boolean)' on a null object reference
        at com.example.android.camera2basic.Camera2BasicFragment.onViewCreated(Camera2BasicFragment.java:565)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1430)
        at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)
        at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
        at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)
        at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)
        at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)
        at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)
        at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)
        at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)
        at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237)
        at android.app.Activity.performStart(Activity.java:6317)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2392)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493) 
        at android.app.ActivityThread.access$1000(ActivityThread.java:150) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5444) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:746) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 
I/Process: Sending signal. PID: 9168 SIG: 9
Application terminated.

我真的很感谢任何帮助。提前致谢!!

最佳答案

试试这个:

View view = inflater.inflate(R.layout.fragment_camera2_basic, null);

LayoutInflater lf = getActivity().getLayoutInflater();   
View view = lf.inflate(R.layout.fragment_camera2_basic, container, false);

关于Android Studio : Attempt to invoke virtual method 'void android.view.View.setOnClickListener' on a null object reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57179471/

相关文章:

android - 从第二个 Activity 返回后更新第一个 Activity 中的 ListView

android - 我们如何通过服务在android中调用一个 Activity ?

Android Camera2 预览输出大小

android - Camera 2 API 可同时预览、记录和提取预览帧以进行 Firebase 人脸检测处理

android - boost 信号 : Connect fails

android - 如果文本比 View 长,动态 TextView 不会选取框

multithreading - 什么是调用线程?

Android camera2 - 支持深度输出的设备

android camera2 qrscanner 二维码扫描器

android - 使用 SlidingMenu 和 ActionBar Sherlock 的 Overlay 切割 Action Bar