NullPointerException: Camera1Manager.setCameraPhotoQuality (Camera1Manager.java:488)
Sony C1504, Android 4.1.1 (rooted)
Fatal Exception: java.lang.NullPointerException at com.github.florent37.camerafragment.internal.manager.impl.Camera1Manager.setCameraPhotoQuality(Camera1Manager.java:488) at com.github.florent37.camerafragment.internal.manager.impl.Camera1Manager.access$400(Camera1Manager.java:39) at com.github.florent37.camerafragment.internal.manager.impl.Camera1Manager$3.run(Camera1Manager.java:166) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.os.HandlerThread.run(HandlerThread.java:60)
did you accept the runtime permission ?
Android 4.1.1 doesn't ask for runtime permissions.
Hi @florent37, to avoid create another issue with the same error I post my errors on this thread.
I have the same issue:
02-08 14:01:34.125 4413-4413/com.inclaninteractive.msp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.inclaninteractive.msp, PID: 4413
java.lang.NullPointerException: Attempt to invoke virtual method 'android.hardware.Camera$Parameters android.hardware.Camera.getParameters()' on a null object reference
at com.github.florent37.camerafragment.internal.manager.impl.Camera1Manager.getPhotoSizeForQuality(Camera1Manager.java:258)
at com.github.florent37.camerafragment.internal.manager.impl.Camera1Manager.getPhotoQualityOptions(Camera1Manager.java:621)
at com.github.florent37.camerafragment.internal.controller.impl.Camera1Controller.getPhotoQualityOptions(Camera1Controller.java:200)
at com.github.florent37.camerafragment.internal.ui.BaseAnncaFragment.setCameraPreview(BaseAnncaFragment.java:639)
at com.github.florent37.camerafragment.internal.ui.BaseAnncaFragment$3.updateCameraPreview(BaseAnncaFragment.java:183)
at com.github.florent37.camerafragment.internal.controller.impl.Camera1Controller.onCameraOpened(Camera1Controller.java:148)
at com.github.florent37.camerafragment.internal.controller.impl.Camera1Controller.onCameraOpened(Camera1Controller.java:30)
at com.github.florent37.camerafragment.internal.manager.impl.Camera1Manager$1$1.run(Camera1Manager.java:73)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
02-08 14:01:34.159 4413-4842/com.inclaninteractive.msp E/EGL_emulation: tid 4842: eglSurfaceAttrib(1146): error 0x3009 (EGL_BAD_MATCH)
02-08 14:01:34.159 4413-4842/com.inclaninteractive.msp W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x8e731c40, error=EGL_BAD_MATCH
I accept the runtime permission on a Nexus 5 with Nougat Preview and Moto G (2014) with Android Marshmallow. The app is crashing when I click on the Save button on PreviewActivity.
I implement a handler for the result like this but is crashing again (code example bellow):
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PreviewActivity.ACTION_CONFIRM && resultCode == RESULT_OK) {
String filePath = data.getStringExtra("file_path_arg");
Log.d("MART_SERRA_DEBUG", "File path: " + filePath);
}
}
Test with Android Lollipop Device
I tested the app with Android Lollipop Tablet (Google Nexus 7), I've noticed a bug in the code. For some devices with only one front camera the code check for cameraManager.getCurrentCameraId() but it is null.
Camera1Controller.java
@Override
public void switchCamera(@Configuration.CameraFace final int cameraFace) {
final Integer backCameraId = cameraManager.getFaceBackCameraId();
final Integer frontCameraId = cameraManager.getFaceFrontCameraId();
if (cameraManager.getCurrentCameraId() != null) {
// Check if the camera is null before set to current camera.
// This part of code crash on some devices with only one camera in front for example: Google Nexus 7 (2012) Model with only front camera
if(cameraManager.getCurrentCameraId().equals(frontCameraId)){
setCurrentCameraId(backCameraId);
} else {
setCurrentCameraId(frontCameraId);
}
} else {
// Set default front camera, I think this is the best way to handle devices with only one camera placed in front
setCurrentCameraId(frontCameraId);
}
cameraManager.closeCamera(this);
}
Thanks in advance and I hope this error is solved.
@MartSerra did you manage to fix the problem? I'm going through the same.
Why is not @MartSerra code merged into the master branch? Did he create a PR?