Skip to content
This repository has been archived by the owner on Dec 29, 2022. It is now read-only.

Cannot Instantiate CameraView in content_main.xml #31

Open
ahmedshah1494 opened this issue Oct 10, 2016 · 4 comments
Open

Cannot Instantiate CameraView in content_main.xml #31

ahmedshah1494 opened this issue Oct 10, 2016 · 4 comments

Comments

@ahmedshah1494
Copy link

ahmedshah1494 commented Oct 10, 2016

I am getting the following error trace when I try to place the CameraView in the content_main.xml file. My gradle settings are configured for APK 9-24. I am currently able to take images using the camera2 API but I wanted to switch to CameraView to avoid writing code for the old API as well.

<com.google.android.cameraview.CameraView android:id="@+id/camera" android:layout_width="10px" android:layout_height="10px" android:adjustViewBounds="true" app:autoFocus="true" app:aspectRatio="4:3" app:facing="back"/>

java.lang.UnsupportedOperationException: Unsupported Service: camera at com.android.layoutlib.bridge.android.BridgeContext.getSystemService(BridgeContext.java:602) at com.google.android.cameraview.Camera2.<init>(Camera2.java:191) at com.google.android.cameraview.CameraView.<init>(CameraView.java:102) at com.google.android.cameraview.CameraView.<init>(CameraView.java:85) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:465) at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:172) at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:105) at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:186) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:334) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:345) at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:245) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:858) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) at android.view.LayoutInflater.rInflate(LayoutInflater.java:834) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:861) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) at android.view.LayoutInflater.rInflate(LayoutInflater.java:834) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater_Delegate.parseInclude(LayoutInflater_Delegate.java:197) at android.view.LayoutInflater.parseInclude(LayoutInflater.java:902) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:854) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) at android.view.LayoutInflater.rInflate(LayoutInflater.java:834) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:518) at android.view.LayoutInflater.inflate(LayoutInflater.java:397) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:324) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:429) at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:389) at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:548) at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:533) at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:966) at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:533) at com.android.tools.idea.rendering.RenderTask.lambda$inflate$72(RenderTask.java:659) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

private View.OnClickListener mOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { if (mCameraView != null) { mCameraView.takePicture(); } } };

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); mCameraView = (CameraView) findViewById(R.id.camera); ... shootB.setOnClickListener(mOnClickListener);
`private CameraView.Callback mCallback
= new CameraView.Callback() {

    @Override
    public void onCameraOpened(CameraView cameraView) {
        Log.d("", "onCameraOpened");
    }

    @Override
    public void onCameraClosed(CameraView cameraView) {
        Log.d("", "onCameraClosed");
    }

    @Override
    public void onPictureTaken(CameraView cameraView, final byte[] data) {
        Log.d("", "onPictureTaken " + data.length);
        handler.post(new Runnable() {
            @Override
            public void run() {
                // This demo app saves the taken picture to a constant file.
                // $ adb pull /sdcard/Android/data/com.google.android.cameraview.demo/files/Pictures/picture.jpg
                File file = new File(Environment.getExternalStorageDirectory()+"/"+DATA_COLLECTOR_FOLDER+"/"+mChosenFile+"/picture.jpg");
                OutputStream os = null;
                try {
                    os = new FileOutputStream(file);
                    os.write(data);
                    os.close();
                } catch (IOException e) {
                    Log.w("", "Cannot write to " + file, e);
                } finally {
                    if (os != null) {
                        try {
                            os.close();
                        } catch (IOException e) {
                            // Ignore
                        }
                    }
                }
            }
        });
    }

};`

This is the error log that I get when I try to take a photo
10-14 20:15:19.315 26409-26409/com.thesis.ahmed.datacollector E/AndroidRuntime: FATAL EXCEPTION: main Process: com.thesis.ahmed.datacollector, PID: 26409 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.hardware.camera2.CaptureRequest$Builder.set(android.hardware.camera2.CaptureRequest$Key, java.lang.Object)' on a null object reference at com.google.android.cameraview.Camera2.lockFocus(Camera2.java:547) at com.google.android.cameraview.Camera2.takePicture(Camera2.java:323) at com.google.android.cameraview.CameraView.takePicture(CameraView.java:376) at com.thesis.ahmed.datacollector.MainActivity$1.onClick(MainActivity.java:79) at android.view.View.performClick(View.java:4856) at android.view.View$PerformClick.run(View.java:19956) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:211) at android.app.ActivityThread.main(ActivityThread.java:5389) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

@yaraki
Copy link
Contributor

yaraki commented Oct 14, 2016

Needs more info.

@ahmedshah1494
Copy link
Author

I am not sure what more information I could provide since I get this error in the layout preview as soon as I place the aforementioned xml in my content_main.xml file.

I am adding my code that uses CameraView, maybe that might help.

@yaraki
Copy link
Contributor

yaraki commented Oct 18, 2016

What is your device? What is the API level of that device?

@andreidiaconu
Copy link
Contributor

This error appears in Preview in Android Studio (not an an actual device). Perhaps we could use View.isInEditMode() as Android Studio suggests?

Tip: Use View.isInEditMode() in your custom views to skip code or show sample data when shown in the IDE.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants