我正在开发一个基于android开发人员教程的简单相机应用,但是我在运行它时遇到了一些问题。

这是我的LogCat打印输出。



现在,您可能已经知道,NullPointerException跟踪在CameraPreview的第30行,因此下面是CameraPreview的代码。我可以用Java编写代码,并且知道NullPointer是什么时候尚未创建的东西,但是据我所知。

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback{
private SurfaceHolder mHolder;
private Camera mCamera;
private static final String TAG = "Preview";

@SuppressWarnings("deprecation")
public CameraPreview(Context context, Camera camera){
    super(context);
    mCamera = camera;

    //Install callback to get notifications from the app
    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //deprecated but required for Android Version 3.0 and under
}

public void surfaceCreated(SurfaceHolder holder) {
    //Surface been created now need to tell app where to draw PREVIEW
            try{
                mCamera.setPreviewDisplay(holder);
                mCamera.startPreview();
            }
            catch(IOException e){
                Log.d(TAG, "Camera preview error: " + e.getMessage());
            }

}


第30行是此处的代码段-mCamera.setPreviewDisplay(holder);

据我所知,“全局”变量private Camera mCamera中有一个mCamera实例。

任何人有任何想法吗?很抱歉,我尽可能地格式化了一个长问题。

谢谢,


附言我知道此类中还需要其他方法,这仅仅是“问题代码段”。

最佳答案

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


看起来camera正在作为null传递给CameraPreview



确保清单中包含以下内容:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />


另外,您的getCameraInstance()方法是什么?

08-06 19:33