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