1、setParameters failed 异常信息如下
11-16 11:21:33.902: WARN/System.err(27218): java.lang.RuntimeException: setParameters failed11-16 11:21:33.902: WARN/System.err(27218): at android.hardware.Camera.native_setParameters(Native Method)......
原因在于
Java代码
parameters.setPreviewSize()//设置预览照片的大小parameters.setPictureSize()//设置照片的大小
这两个属性 如果这两个属性设置的和真实手机的不一样时,就会报上面的错误 很是郁闷
最好的方法 就是 不设置这两项
2、java.lang.NullPointerException
11-16 13:33:39.801: ERROR/AndroidRuntime(5676): FATAL EXCEPTION: main11-16 13:33:39.801: ERROR/AndroidRuntime(5676): java.lang.NullPointerException11-16 13:33:39.801: ERROR/AndroidRuntime(5676): at com.huitu.project.PicActivity.onKeyDown(PicActivity.java:87)11-16 13:33:39.801: ERROR/AndroidRuntime(5676): at android.view.KeyEvent.dispatch(KeyEvent.java:1257)11-16 13:33:39.801: ERROR/AndroidRuntime(5676): at android.app.Activity.dispatchKeyEvent(Activity.java:2075)
其实 这个原因 是因为
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(event.getRepeatCount()==0 && camera!=null){ switch (keyCode) { case KeyEvent.KEYCODE_SEARCH://按下的是搜索键 camera.autoFocus(null);//自动对焦 return true; case KeyEvent.KEYCODE_CAMERA: case KeyEvent.KEYCODE_DPAD_CENTER: camera.takePicture(null, null, new MyPictureCallback()); Intent data = new Intent(); data.putExtra("picFile", picFile.getAbsolutePath()); setResult(100, data); finish(); return true; } } return super.onKeyDown(keyCode, event); }private final class MyPictureCallback implements PictureCallback{ private String name = "pic"; public void onPictureTaken(byte[] data, Camera camera) { try { Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); picFile = new File(Environment.getExternalStorageDirectory(), name + System.currentTimeMillis()+".jpg"); FileOutputStream outStream = new FileOutputStream(picFile); bitmap.compress(CompressFormat.JPEG, 100, outStream); outStream.close(); //camera.startPreview(); } catch (Exception e) { e.printStackTrace(); } } }
Java代码
camera.takePicture(null, null, new MyPictureCallback());这个方法是异步执行的 也就是说
new MyPictureCallback()还没有执行完成,
Intent data = new Intent();data.putExtra("picFile", picFile.getAbsolutePath());setResult(100, data);finish();
下面的代码就开始执行了 这时候 picFile就是空的 所以就会报空指针异常
解决方法 把
- 11-16 11:21:33.902: WARN/System.err(27218): java.lang.RuntimeException: setParameters failed
-
11-16 11:21:33.902: WARN/System.err(27218): at android.hardware.Camera.native_setParameters(Native Method) - ...
- ...
11-16 11:21:33.902: WARN/System.err(27218): java.lang.RuntimeException: setParameters failed11-16 11:21:33.902: WARN/System.err(27218): at android.hardware.Camera.native_setParameters(Native Method)......
原因在于
Java代码
- parameters.setPreviewSize()//设置预览照片的大小
- parameters.setPictureSize()//设置照片的大小
parameters.setPreviewSize()//设置预览照片的大小parameters.setPictureSize()//设置照片的大小
这两个属性 如果这两个属性设置的和真实手机的不一样时,就会报上面的错误 很是郁闷
最好的方法 就是 不设置这两项
2、java.lang.NullPointerException
- 11-16 13:33:39.801: ERROR/AndroidRuntime(5676): FATAL EXCEPTION: main
-
11-16 13:33:39.801: ERROR/AndroidRuntime(5676): java.lang.NullPointerException -
11-16 13:33:39.801: ERROR/AndroidRuntime(5676): at com.huitu.project.PicActivity.onKeyDown(PicActivity.java:87) -
11-16 13:33:39.801: ERROR/AndroidRuntime(5676): at android.view.KeyEvent.dispatch(KeyEvent.java:1257) -
11-16 13:33:39.801: ERROR/AndroidRuntime(5676): at android.app.Activity.dispatchKeyEvent(Activity.java:2075)
11-16 13:33:39.801: ERROR/AndroidRuntime(5676): FATAL EXCEPTION: main11-16 13:33:39.801: ERROR/AndroidRuntime(5676): java.lang.NullPointerException11-16 13:33:39.801: ERROR/AndroidRuntime(5676): at com.huitu.project.PicActivity.onKeyDown(PicActivity.java:87)11-16 13:33:39.801: ERROR/AndroidRuntime(5676): at android.view.KeyEvent.dispatch(KeyEvent.java:1257)11-16 13:33:39.801: ERROR/AndroidRuntime(5676): at android.app.Activity.dispatchKeyEvent(Activity.java:2075)
其实 这个原因 是因为
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if(event.getRepeatCount()==0 && camera!=null){
- switch (keyCode) {
- case KeyEvent.KEYCODE_SEARCH://按下的是搜索键
- camera.autoFocus(null);//自动对焦
- return true;
- case KeyEvent.KEYCODE_CAMERA:
- case KeyEvent.KEYCODE_DPAD_CENTER:
- camera.takePicture(null, null, new MyPictureCallback());
- Intent data = new Intent();
- data.putExtra("picFile", picFile.getAbsolutePath());
- setResult(100, data);
- finish();
- return true;
- }
- }
- return super.onKeyDown(keyCode, event);
- }
-
private final class MyPictureCallback implements PictureCallback{ - private String name = "pic";
- public void onPictureTaken(byte[] data, Camera camera) {
- try {
- Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
- picFile = new File(Environment.getExternalStorageDirectory(), name + System.currentTimeMillis()+".jpg");
- FileOutputStream outStream = new FileOutputStream(picFile);
- bitmap.compress(CompressFormat.JPEG, 100, outStream);
- outStream.close();
- //camera.startPreview();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(event.getRepeatCount()==0 && camera!=null){ switch (keyCode) { case KeyEvent.KEYCODE_SEARCH://按下的是搜索键 camera.autoFocus(null);//自动对焦 return true; case KeyEvent.KEYCODE_CAMERA: case KeyEvent.KEYCODE_DPAD_CENTER: camera.takePicture(null, null, new MyPictureCallback()); Intent data = new Intent(); data.putExtra("picFile", picFile.getAbsolutePath()); setResult(100, data); finish(); return true; } } return super.onKeyDown(keyCode, event); }private final class MyPictureCallback implements PictureCallback{ private String name = "pic"; public void onPictureTaken(byte[] data, Camera camera) { try { Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); picFile = new File(Environment.getExternalStorageDirectory(), name + System.currentTimeMillis()+".jpg"); FileOutputStream outStream = new FileOutputStream(picFile); bitmap.compress(CompressFormat.JPEG, 100, outStream); outStream.close(); //camera.startPreview(); } catch (Exception e) { e.printStackTrace(); } } }
Java代码
- camera.takePicture(null, null, new MyPictureCallback());
camera.takePicture(null, null, new MyPictureCallback());这个方法是异步执行的 也就是说
new MyPictureCallback()还没有执行完成,
- Intent data = new Intent();
- data.putExtra("picFile", picFile.getAbsolutePath());
- setResult(100, data);
- finish();
Intent data = new Intent();data.putExtra("picFile", picFile.getAbsolutePath());setResult(100, data);finish();
下面的代码就开始执行了 这时候 picFile就是空的 所以就会报空指针异常
解决方法 把
- Intent data = new Intent();
- data.putExtra("picFile", picFile.getAbsolutePath());
- setResult(100, data);
- finish();
- 放到MyPictureCallback()里面 最后执行即可