本文介绍了.SET previewDisplay(持有者)抛出空指针异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发一个自定义的相机以下application.Given是我Activity类。

I am developing a custom camera application.Given below is my Activity class.

public class MyCustomCam extends Activity {
private Camera mCamera;
private CameraPreview mPreview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mCamera = getCameraInstance();
    mPreview = new CameraPreview(this, mCamera);
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
    preview.addView(mPreview);
}
    public static Camera getCameraInstance(){
        Camera c = null;
        try {
        c = Camera.open(); // attempt to get a Camera instance
        }
        catch (Exception e){
            // Camera is not available (in use or does not exist)
            }
        return c; // returns null if camera is unavailable}

       }
       }

下面给出

是我的main.xml

Given below is my main.xml

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
   android:layout_height="fill_parent"    >
 <FrameLayout
   android:id="@+id/camera_preview"
   android:layout_width="fill_parent"
       android:layout_height="fill_parent"
          android:layout_weight="1"    />
        <Button    android:id="@+id/button_capture"
          android:text="Capture"
         android:layout_width="wrap_content"
   android:layout_height="wrap_content"
    android:layout_gravity="center"
   /></LinearLayout>

这是我的相机preVIEW类

And this is my CameraPreview class

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
public CameraPreview(Context context, Camera camera) {
    super(context);
    mCamera = camera;        // Install a SurfaceHolder.Callback so we get notified when the
    // underlying surface is created and destroyed.
    mHolder = getHolder();
    mHolder.addCallback(this);
    // deprecated setting, but required on Android versions prior to 3.0
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }
public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, now tell the camera where to draw the preview.
    try {
        mCamera.setPreviewDisplay(holder);
        mCamera.startPreview();
    } catch (IOException e) {

        Log.d("", "Error setting camera preview: " + e.getMessage());
        }
    }
public void surfaceDestroyed(SurfaceHolder holder) {
            // empty. Take care of releasing the Camera preview in your activity.
    }
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        // If your preview can change or rotate, take care of those events here.
        // Make sure to stop the preview before resizing or reformatting it.
        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("", "Error starting camera preview: " + e.getMessage());
           }
}
   }

下面

   mCamera.setPreviewDisplay(holder);

code抛出空指针异常......我不能修复that.please告诉我,为什么它抛出异常,我该如何解决呢?

code is throwing null pointer exception...i cant fix that.please tell me why it is throwing exception and how can i fix that?

推荐答案

松开相机在surfaceDestroyed功能

Release the camera in your surfaceDestroyed function

public void surfaceDestroyed(SurfaceHolder holder) {
        if (mCamera != null) {
        mCamera.stopPreview();
        mCamera.release();
        mCamera = null;
}

,并确保在您的清单文件中添加摄像头的权限。

and make sure you add camera permission in your manifest file.

<uses-permission android:name="android.permission.CAMERA" />

这篇关于.SET previewDisplay(持有者)抛出空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-03 21:53
查看更多