1
我正在構建一個捕獲圖像並顯示它們以進一步操作的應用程序,下面是我的代碼和來自logcat的錯誤日誌,我能做些什麼來避免空指針異常? 我有一個按鈕,開始我的相機活動,並奠定了這個預覽。 請幫助,我花了整整一天,但無法找到正確的方法來解決它。NullPointerException在parameters.getSupportedPictureFormats
public class Preview extends SurfaceView implements SurfaceHolder.Callback , PictureCallback {
private SurfaceHolder mHolder;
private Camera mCamera;
private RawCallback mRawCallBack;
public Preview(Context context) {
super(context);
// TODO Auto-generated constructor stub
mHolder = getHolder();
mHolder.addCallback(this);
//mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mRawCallBack = new RawCallback();
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mCamera.takePicture(mRawCallBack, mRawCallBack, null, Preview.this);
}
});
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO Auto-generated method stub
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(width, height);
mCamera.startPreview();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera = Camera.open();
configure(mCamera);
try{
mCamera.setPreviewDisplay(holder);
} catch(IOException exception){
closeCamera();
}
}
private void closeCamera() {
// TODO Auto-generated method stub
if(mCamera != null){
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
private void configure(Camera camera) {
// TODO Auto-generated method stub
Camera.Parameters params = camera.getParameters();
//configure in RGB format
List<Integer> formats = params.getSupportedPictureFormats();
if(formats.contains(ImageFormat.RGB_565))
params.setPictureFormat(ImageFormat.RGB_565);
else if(formats.contains(ImageFormat.JPEG))
params.setPictureFormat(ImageFormat.JPEG);
else if(formats.contains(ImageFormat.YUY2))
params.setPictureFormat(ImageFormat.YUY2);
else if(formats.contains(ImageFormat.YV12))
params.setPictureFormat(ImageFormat.YV12);
else if(formats.contains(ImageFormat.NV16))
params.setPictureFormat(ImageFormat.NV16);
else if(formats.contains(ImageFormat.NV21))
params.setPictureFormat(ImageFormat.NV21);
// biggest Picture Support from hardware
List<Size> sizes = params.getSupportedPictureSizes();
Camera.Size size = sizes.get(sizes.size()-1);
params.setPictureSize(size.width, size.height);
List<String> flashModes = params.getSupportedFlashModes();
if(flashModes.size() > 0)
params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
//for fast moving objects, would be null if fullscreen mode is not supported
List<String> sceneModes = params.getSupportedSceneModes();
if(sceneModes.contains(Camera.Parameters.SCENE_MODE_ACTION))
params.setSceneMode(Camera.Parameters.SCENE_MODE_ACTION);
else
params.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
params.setFocusMode(Camera.Parameters.FOCUS_MODE_FIXED);
camera.setParameters(params);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
closeCamera();
}
@Override
public void onPictureTaken(byte[] jpeg, android.hardware.Camera camera) {
// TODO Auto-generated method stub
mCamera.startPreview();
}
這裏是日誌
03-07 00:33:03.658: D/gralloc_goldfish(1231): Emulator without GPU emulation detected.
03-07 00:33:13.248: D/AndroidRuntime(1231): Shutting down VM
03-07 00:33:13.248: W/dalvikvm(1231): threadid=1: thread exiting with uncaught exception (group=0xb67ad4f0)
03-07 00:33:13.268: E/AndroidRuntime(1231): FATAL EXCEPTION: main
03-07 00:33:13.268: E/AndroidRuntime(1231): java.lang.NullPointerException
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.hardware.Camera$Parameters.getSupportedPictureFormats(Camera.java:1721)
03-07 00:33:13.268: E/AndroidRuntime(1231): at com.in2gravity.smartdoc.Preview.configure(Preview.java:81)
03-07 00:33:13.268: E/AndroidRuntime(1231): at com.in2gravity.smartdoc.Preview.surfaceCreated(Preview.java:54)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.view.SurfaceView.updateWindow(SurfaceView.java:543)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.view.SurfaceView.dispatchDraw(SurfaceView.java:348)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.view.View.draw(View.java:6883)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.widget.FrameLayout.draw(FrameLayout.java:357)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.view.View.draw(View.java:6883)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.widget.FrameLayout.draw(FrameLayout.java:357)
03-07 00:33:13.268: E/AndroidRuntime(1231): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.view.ViewRoot.draw(ViewRoot.java:1522)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.view.ViewRoot.performTraversals(ViewRoot.java:1258)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.os.Looper.loop(Looper.java:130)
03-07 00:33:13.268: E/AndroidRuntime(1231): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-07 00:33:13.268: E/AndroidRuntime(1231): at java.lang.reflect.Method.invokeNative(Native Method)
03-07 00:33:13.268: E/AndroidRuntime(1231): at java.lang.reflect.Method.invoke(Method.java:507)
03-07 00:33:13.268: E/AndroidRuntime(1231): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-07 00:33:13.268: E/AndroidRuntime(1231): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-07 00:33:13.268: E/AndroidRuntime(1231): at dalvik.system.NativeStart.main(Native Method)
我覺得這是不是所有的logcat的錯誤,必須有一些線條更加 –
@Shayan我已經添加了前三行,我錯過了爭取 –
你沒有最後一行之後的任何錯誤? –