空指针异常.
通常由使用空值造成,由未初始化对象产生.
在做foxbox 这个项目的spycamera模块时, 当不打开预览(则 Camera对象未初始化) 直接返回主菜单时,surfaceDestroyed 弹出该异常.
因为此函数
public void surfaceDestroyed(SurfaceHolder surfaceholder)
{
mCamera01.stopPreview();
mCamera01.release();
mCamera01 = null;
try
{
delFile(strCaptureFilePath);
}
catch(Exception e)
{
e.printStackTrace();
}
Log.i(TAG,"surface Destroyed");
}
操作了未初始化的mCamera01 对象.
解决方法: 设置 boolean isinited =false;
当预览打开,即初始化相机时 isinited =1;
在 surfaceDestroyed 添加语句
public void surfaceDestroyed(SurfaceHolder surfaceholder)
{
if(isinited==false)
mCamera01=Camera.open();
mCamera01.stopPreview();
mCamera01.release();
mCamera01 = null;
try
{
delFile(strCaptureFilePath);
}
catch(Exception e)
{
e.printStackTrace();
}
Log.i(TAG,"surface Destroyed");
}
在开发Android spycamera模块时,若不打开预览直接返回,可能导致因未初始化Camera对象而引发的空指针异常。在surfaceDestroyed()中直接操作mCamera01会触发异常。解决方案是在初始化相机时设置标记isinited,并在surfaceDestroyed()内检查isinited,避免对未初始化的对象进行操作。

被折叠的 条评论
为什么被折叠?



