dongming86 2015-05-10 08:20 采纳率: 0%
浏览 2468

NullPointerException

图片说明


    出错的117行:camera.setParameters(params);
    出错的89行:private void setOpenClickListener() {
  和下面的代码:
    open.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //开启摄像头
            openCamera();
        }
    });
}
    全部代码如下:
    public class MainActivity extends Activity {

private Button open;
private Button play;
private Button close;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private Camera camera;
//private ToneGenerator tone;
//private Parameters params = null;

private final int previewWidth = 320;
private final int previewHeight = 240;

protected String filepath = "/sdcard/mypicture.jpg";



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

    initView();
    setListener();
}

private void initView() {
    // TODO Auto-generated method stub

    open = (Button) findViewById(R.id.open);
    play = (Button) findViewById(R.id.play);
    close = (Button) findViewById(R.id.close);

    surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
    surfaceHolder = surfaceView.getHolder();
    surfaceHolder.addCallback(new SurfaceHolder.Callback() {

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            Log.i("camera", "surfaceDestroyed");
        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            Log.i("camera", "surfaceCreated");
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
            Log.i("camera", "surfaceChanged");
        }
    });
}

private void setListener() {
    setOpenClickListener();
    setPlayClickListener();
    setCloseClickListener();
}
private void setOpenClickListener() {
    open.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //开启摄像头
            openCamera();
        }
    });
}

protected void openCamera() {
    // TODO Auto-generated method stub

    //配置摄像头参数
    if(camera!=null){
        try{

            camera = Camera.open();//这里不需要捕获异常么??
        }catch(Exception e){
            Log.i("camera","open camera error!");
            e.printStackTrace();
            return;
        }
        Camera.Parameters params = camera.getParameters();
        params.setPreviewSize(previewWidth, previewHeight);
        params.setPictureFormat(PixelFormat.JPEG);
        params.setPictureSize(previewWidth, previewHeight);
        camera.setParameters(params);
    }


    //启动预览
    try {
        camera.setPreviewDisplay(surfaceHolder);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Log.i("camera","preview failed!");
        e.printStackTrace();
    }
    camera.startPreview();
}
private void setPlayClickListener() {
    play.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //拍照
            takePicture();
        }
    });
}

protected void takePicture() {
    // TODO Auto-generated method stub
    if(checkSDcard()){
        camera.takePicture(null,null, jpeg);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        camera.startPreview();
    }else{
        Log.i("camera","SD card not exit!");
        //注意这里是log.e不是log.i
        return;
    }
}


private void setCloseClickListener() {
    close.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //关闭摄像头
            closeCamera();
        }
    });
}

protected void closeCamera() {
    // TODO Auto-generated method stub
    camera.stopPreview();
    camera.release();
    camera = null;
}




private PictureCallback jpeg = new PictureCallback() {

    @SuppressWarnings("unused")
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
        File pictureFile = new File(filepath);
        if(pictureFile==null){
            Log.i("camera","Error creating media file,check storage permission");
            return;
        }
        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            bitmap.compress(Bitmap.CompressFormat.JPEG,80,bos);
            bos.flush();
            bos.close();
            fos.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch(IOException e){
            Log.i("camera","Error accessing file:"+e.getMessage());
        }


    }
};

// private ShutterCallback shutterCallback = new ShutterCallback() {
//

// @Override
// public void onShutter() {
// // TODO Auto-generated method stub
// Log.i("camera","shutterCallback");
// if(tone==null){
// tone = new ToneGenerator(AudioManager.STREAM_MUSIC,ToneGenerator.MAX_VOLUME);
// tone.startTone(ToneGenerator.TONE_PROP_BEEP2);
// }
// }
// };

private boolean checkSDcard(){
    if(android.os.Environment.getExternalStorageDirectory().equals(android.os.Environment.MEDIA_MOUNTED)){
        return true;
    }else{
        return false;
    }
}

}

  • 写回答

3条回答 默认 最新

  • Michael716feng 2015-05-10 09:11
    关注

    123行有空,直接去那找就好了

    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 UE5#if WITH_EDITOR导致打包的功能不可用
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面
  • ¥15 算法题:数的划分,用记忆化DFS做WA求调