Java setOnClickListener正在引发空指针异常

Java setOnClickListener正在引发空指针异常,java,android,Java,Android,我试图在我的相机预览上有多个按钮。该应用程序使用了一个记录按钮和一个下拉菜单按钮。然而,一旦我尝试为十字线添加缩放按钮,应用程序就会崩溃。代码可以编译,但应用程序无法运行。似乎在其他任何地方都找不到有用的答案 我一直在处理onViewCreated()、onClick()和onCreate()之间的代码行,但我无法让应用程序运行 @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(sav

我试图在我的相机预览上有多个按钮。该应用程序使用了一个记录按钮和一个下拉菜单按钮。然而,一旦我尝试为十字线添加缩放按钮,应用程序就会崩溃。代码可以编译,但应用程序无法运行。似乎在其他任何地方都找不到有用的答案

我一直在处理onViewCreated()、onClick()和onCreate()之间的代码行,但我无法让应用程序运行

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_camera);

    if (null == savedInstanceState) {
        getFragmentManager().beginTransaction()
            .replace(R.id.container,Camera2VideoFragment.newInstance())
            .commit();
    }
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}

@Override
public void onViewCreated(final View view, Bundle savedInstanceState) {
    mTextureView = view.findViewById(R.id.texture);
    mButtonVideo = view.findViewById(R.id.video);
    mZoomIn = view.findViewById(R.id.imageButton1);
    mZoomOut = view.findViewById(R.id.imageButton2);

    mButtonVideo.setOnClickListener(this);
    mZoomIn.setOnClickListener(this);
    mZoomOut.setOnClickListener(this);

    view.findViewById(R.id.info).setOnClickListener(this);
    view.findViewById(R.id.imageView1).setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.video: {
            if (mIsRecordingVideo) {
                stopRecordingVideo();
            } else {
                startRecordingVideo();
            }
            break;
        }
        case R.id.info: {
            Activity activity = getActivity();
            if (null != activity) {
                new AlertDialog.Builder(activity)
                        .setMessage(R.string.intro_message)
                        .setPositiveButton(android.R.string.ok, null)
                        .show();
            }
            break;
        }

        case R.id.imageButton1: {
            Activity activity = getActivity();
            if (null != activity) {
                ImageView img = view.findViewById(R.id.imageView1);
                float x = img.getScaleX();
                float y = img.getScaleY();

                img.setScaleX(x + 2);
                img.setScaleY(y + 2);
            }
        }
    }
}
代码可以编译,但应用程序崩溃。Logcat告诉我错误在带有setOnClickListeners()的onViewCreated()中。findViewById()将null赋值给按钮,但我不知道为什么


我最终希望使用放大/缩小按钮来缩放视频预览,而不是十字线。这方面的任何帮助都会很好。我还计划制作一个可调亮度的seekbar,这样对它的帮助也会很好。

我不明白为什么要使用
onViewCreated()
您可以像以下代码一样实现onCreateView(…):

@Override
  protected void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_camera);

     if (null == savedInstanceState) {
    getFragmentManager().beginTransaction()
        .replace(R.id.container,Camera2VideoFragment.newInstance())
        .commit();
}




getWindow().getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}

@Override
 public void onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
 View view = inflater.inflate(R.layout.YOUR_LAYOUT, container, false);
 mTextureView = view.findViewById(R.id.texture);
 mButtonVideo = view.findViewById(R.id.video);
 mZoomIn = view.findViewById(R.id.imageButton1);
 mZoomOut = view.findViewById(R.id.imageButton2);

mButtonVideo.setOnClickListener(this);
mZoomIn.setOnClickListener(this);
mZoomOut.setOnClickListener(this);

view.findViewById(R.id.info).setOnClickListener(this);
view.findViewById(R.id.imageView1).setOnClickListener(this);
return view;
}

     @Override
   public void onClick(View view) {
   switch (view.getId()) {
    case R.id.video: {
        if (mIsRecordingVideo) {
            stopRecordingVideo();
        } else {
            startRecordingVideo();
        }
        break;
    }
    case R.id.info: {
        Activity activity = getActivity();
        if (null != activity) {
            new AlertDialog.Builder(activity)
                    .setMessage(R.string.intro_message)
                    .setPositiveButton(android.R.string.ok, null)
                    .show();
        }
        break;
    }

    case R.id.imageButton1: {
        Activity activity = getActivity();
        if (null != activity) {
            ImageView img = view.findViewById(R.id.imageView1);
            float x = img.getScaleX();
            float y = img.getScaleY();

            img.setScaleX(x + 2);
            img.setScaleY(y + 2);
         }
      }
  }
  }

我读过很多帖子,包括“什么是NullPointerException,我如何修复它?”我理解它背后的逻辑,但我似乎无法具体地为我的代码找到它。这可能有助于您调查问题: