【问题标题】:Camera.open() THROWS nullCamera.open() 抛出空
【发布时间】:2013-06-12 10:01:00
【问题描述】:

要明确一点:这与返回 null 的函数无关。这是关于一个函数抛出一个Exception 原来是null

throw null;

这样。

我有一个相机应用程序,它在 Ice Cream Sandwich 中运行良好已有一段时间了。在姜饼中它崩溃了;但是,我刚刚看到Camera.open() throw null

try {
    releaseCameraAndPreview();
    mCamera = Camera.open(camera);
    //and the above throws ...
} catch (Exception e) {
    e.printStackTrace();
    //and e is null, causing a NullPointerException
}

releaseCameraAndPreview是这个:

private void releaseCameraAndPreview() {
    if (mCamera != null) {
        mCamera.stopPreview();
        mCamera.release();
        mCamera = null;
    }
}

此时相机为空,因此没有任何反应。

我什至不知道 可能 抛出 null。什么意思?

【问题讨论】:

  • releaseCameraAndPreview();检查此函数中发生了什么。同时发布完整的堆栈跟踪
  • 无论如何发布堆栈跟踪。
  • 使用 mCamera.release();完成后的图片
  • 根据docs,如果设备没有后置摄像头,Camera.open()返回null。你确定你使用的是 open(int) 而不是 open()?
  • 顺便说一句,你知道不会有堆栈跟踪,对吧?异常为空,因此 printStackTrace() 正在抛出 NPE。

标签: android exception null android-camera


【解决方案1】:

重启手机解决了这个问题;我只能假设相机在测试期间以某种方式进入了损坏状态。

【讨论】:

  • 但这不是最好的解决方案。
  • 我知道,但我不明白为什么Camera.open() 也会抛出null
【解决方案2】:

重新锁定相机以防止其他进程访问它。除非调用 unlock(),否则默认情况下会锁定相机对象。通常使用 reconnect() 代替。
从 API 级别 14 开始,相机在 start() 中为应用程序自动锁定。应用程序可以在录制开始后使用相机(例如:变焦)。录制开始或停止后无需调用它。

检查对象是否被锁定,如果是,请尝试解锁。

https://developer.android.com/reference/android/hardware/Camera.html#lock%28%29

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 2012-08-16
    • 2013-05-21
    • 1970-01-01
    • 2017-09-02
    • 2012-09-09
    • 2014-06-15
    • 2017-07-08
    相关资源
    最近更新 更多