Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
切换android自定义摄像头会导致应用程序崩溃_Android_Nullpointerexception_Android Camera_Illegalstateexception - Fatal编程技术网

切换android自定义摄像头会导致应用程序崩溃

切换android自定义摄像头会导致应用程序崩溃,android,nullpointerexception,android-camera,illegalstateexception,Android,Nullpointerexception,Android Camera,Illegalstateexception,我正在制作一个定制的android摄像头应用程序。在我的活动中,我添加了一个按钮来切换摄像机。点击那个按钮,我的相机切换得很好,但当我试图通过回调保存图像时,我的应用程序由于NullPointerException而崩溃。这是我的密码。请帮帮我。 先谢谢你 摄像机活动代码 } 我的自定义相机处理程序 我相信我的应用程序崩溃了,因为当我切换相机时,mCamera变为空。我怎样才能解决这个问题 我得到的错误是: 听了Rami的评论后,我在两个地方修改了代码 一, 二,。切换摄像机功能 publ

我正在制作一个定制的android摄像头应用程序。在我的活动中,我添加了一个按钮来切换摄像机。点击那个按钮,我的相机切换得很好,但当我试图通过回调保存图像时,我的应用程序由于NullPointerException而崩溃。这是我的密码。请帮帮我。 先谢谢你

摄像机活动代码

}

我的自定义相机处理程序

我相信我的应用程序崩溃了,因为当我切换相机时,mCamera变为空。我怎样才能解决这个问题

我得到的错误是:


听了Rami的评论后,我在两个地方修改了代码 一,

二,。切换摄像机功能

   public Camera switchCamera()  { 
    mCamera.stopPreview(); 
    mCamera.release(); 

    if(currentCameraID==Camera.CameraInfo.CAMERA_FACING_BACK)
    { 

        currentCameraID = Camera.CameraInfo.CAMERA_FACING_FRONT;
    } 
    else 
    { 

        currentCameraID=Camera.CameraInfo.CAMERA_FACING_BACK;
    } 
     mCamera=Camera.open(currentCameraID);
    fixOr(); 
    try { 
        mCamera.setPreviewDisplay(mHolder);
    } catch (IOException e) {
        e.printStackTrace();
    } 
    mCamera.startPreview(); 
}     return mCamera;

发布堆栈跟踪请立即检查。。我已指定错误及其原因您的mCamera对象为空。如何修复该错误?请告诉我?
  public class CameraHandler extends SurfaceView implements SurfaceHolder.Callback {
    private SurfaceHolder mHolder;

    private Camera mCamera=null;
    public int currentCameraID=0;

    public CameraHandler(Context context,Camera camera) {
        super(context);
        mCamera=camera;

        mHolder=getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            mCamera.setPreviewDisplay(holder);

            Camera.Parameters p = mCamera.getParameters();

        }
        catch (IOException e)
        {
            Log.d("--DS", "Error setting camera preview: " + e.getMessage());
        }

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        fixOr();
        if(mHolder.getSurface()==null)
        {
            return;
        }
        if (mHolder.getSurface() == null){
            // preview surface does not exist
            return;
        }

        // stop preview before making changes
        try {
            mCamera.stopPreview();
        } catch (Exception e){
            // ignore: tried to stop a non-existent preview
        }

        // set preview size and make any resize, rotate or
        // reformatting changes here

        // start preview with new settings
        try {
            mCamera.setPreviewDisplay(mHolder);
            mCamera.startPreview();

        } catch (Exception e){
            Log.d("--DS", "Error starting camera preview: " + e.getMessage());
        }
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        mCamera.setPreviewCallback(null);
        mCamera.stopPreview();
        mCamera.release();
        mCamera = null;
    }
    public void fixOr()
    {
       mCamera.stopPreview();
        mCamera.setDisplayOrientation(90);
        mCamera.startPreview();
    }

    public void switchCamera()  {
        mCamera.stopPreview();
        mCamera.release();

        if(currentCameraID==Camera.CameraInfo.CAMERA_FACING_BACK)
        {

            currentCameraID = Camera.CameraInfo.CAMERA_FACING_FRONT;
        }
        else
        {

            currentCameraID=Camera.CameraInfo.CAMERA_FACING_BACK;
        }
         mCamera=Camera.open(currentCameraID);
        fixOr();
        try {
            mCamera.setPreviewDisplay(mHolder);
        } catch (IOException e) {
            e.printStackTrace();
        }
        mCamera.startPreview();
    }    
}
    java.lang.IllegalStateException: Could not execute method of the activity

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 
            'android.hardware.Camera$Parameters android.hardware.Camera.getParameters()'
             on a null object reference
 public void switchC(View view)//Function called to switch camera
{ 

 mCamera=surface_view.switchCamera();
} 
   public Camera switchCamera()  { 
    mCamera.stopPreview(); 
    mCamera.release(); 

    if(currentCameraID==Camera.CameraInfo.CAMERA_FACING_BACK)
    { 

        currentCameraID = Camera.CameraInfo.CAMERA_FACING_FRONT;
    } 
    else 
    { 

        currentCameraID=Camera.CameraInfo.CAMERA_FACING_BACK;
    } 
     mCamera=Camera.open(currentCameraID);
    fixOr(); 
    try { 
        mCamera.setPreviewDisplay(mHolder);
    } catch (IOException e) {
        e.printStackTrace();
    } 
    mCamera.startPreview(); 
}     return mCamera;