CameraFragment icon indicating copy to clipboard operation
CameraFragment copied to clipboard

NullPointerException: Camera1Manager.setCameraPhotoQuality (Camera1Manager.java:488)

Open jdgd opened this issue 9 years ago • 5 comments

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)

jdgd avatar Jan 30 '17 22:01 jdgd

did you accept the runtime permission ?

florent37 avatar Jan 31 '17 08:01 florent37

Android 4.1.1 doesn't ask for runtime permissions.

jdgd avatar Jan 31 '17 17:01 jdgd

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.

ghost avatar Feb 08 '17 20:02 ghost

@MartSerra did you manage to fix the problem? I'm going through the same.

Rafagf avatar Jul 29 '17 16:07 Rafagf

Why is not @MartSerra code merged into the master branch? Did he create a PR?

RafagSL avatar Aug 07 '17 14:08 RafagSL