Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NullPointerException出错_Java_Android_Opencv_Nullpointerexception - Fatal编程技术网

java.lang.NullPointerException出错

java.lang.NullPointerException出错,java,android,opencv,nullpointerexception,Java,Android,Opencv,Nullpointerexception,我正在使用OpenCV库开发一个简单的AR应用程序,我的本机部分做得很好,并在genymotion模拟器中成功运行。然而,当我想部署到我的设备(索尼C2105-Android 4.2.2与emulator版本相同)时,它失败了 错误日志: CameraPreview.java: 公共类CameraPreview扩展了SurfaceView实现 SurfaceHolder,回拨{ 私有静态最终字符串TAG=“CameraPreview”; 私人摄像机麦卡梅拉; 私人地勤人员; 私有帧宽度; 私家车

我正在使用
OpenCV库
开发一个简单的AR应用程序,我的本机部分做得很好,并在genymotion模拟器中成功运行。然而,当我想部署到我的
设备(索尼C2105-Android 4.2.2与emulator版本相同)
时,它失败了

错误日志: CameraPreview.java:
公共类CameraPreview扩展了SurfaceView实现
SurfaceHolder,回拨{
私有静态最终字符串TAG=“CameraPreview”;
私人摄像机麦卡梅拉;
私人地勤人员;
私有帧宽度;
私家车高度;
私人经理人;
公共CameraPreview(上下文、处理程序){
超级(上下文);
mHolder=getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE\u TYPE\u PUSH\u缓冲区);
mHandler=handler;
Log.i(标记“实例化新”+this.getClass());
}
公共无效表面更改(表面文件夹(持有者,整数格式,整数宽度,,
整数高度){
Log.i(标签“表面处理”);
if(mCamera!=null){
Camera.Parameters params=mCamera.getParameters();
列表大小=params.getSupportedPreviewSizes();
mFrameWidth=宽度;
mFrameHeight=高度;
//选择最佳相机预览尺寸
{
double minDiff=double.MAX_值;
用于(相机尺寸:尺寸){
if(数学绝对值(尺寸高度-高度)
首先检查清单文件中的以下权限

<uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />
如果为true,则在CameraPreview构造函数中获取camera实例,并在代码中将该值分配给mCamera实例

mCamera=getCameraInstance()

//需要一些小的延迟来获取实例

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
}



public void surfaceCreated(SurfaceHolder holder) {

Log.i(TAG, "surfaceCreated");
   if(mCamera == null)
           mCamera = getCameraInstance();
    try {
        mCamera.setPreviewDisplay(holder);
        mCamera.startPreview();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    mCamera.setOneShotPreviewCallback(mCallback);

    }

@user3110424应用程序似乎在
onSurfaceCreated()
中崩溃,而不是在构造函数中崩溃。Camera.open()似乎返回null。您是否在androidmanifest中授予了上述权限file@Sid
mCamera
onSurfaceCreated()
中始终为空,因为它以前没有被实例化过。@user3110424谢谢你,当然我在xml部分已经这样做了。我可以在emulator中运行它,但在实际设备中失败了。很抱歉,提供的解决方案似乎不利于我的问题。同样的事情也发生了,它只是在com.example.detectimage.CameraPreview.surfaceCreated(CameraPreview.java:68)上不断地说。不过,非常感谢您提供了清晰、编写良好的解决方案。是的,我也创建了一个干净的摄像头。创建一个新的摄像头对象来访问设备上的第一个后向摄像头。如果设备没有背面摄像头,则返回null。尝试使用相机。打开(0);通过摄像机id。
<uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />
/** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        // this device has a camera
        return true;
    } else {
        // no camera on this device
        return false;
    }
}
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
}



public void surfaceCreated(SurfaceHolder holder) {

Log.i(TAG, "surfaceCreated");
   if(mCamera == null)
           mCamera = getCameraInstance();
    try {
        mCamera.setPreviewDisplay(holder);
        mCamera.startPreview();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    mCamera.setOneShotPreviewCallback(mCallback);

    }