【问题标题】:Getting exception while navigating between fragments after image capture (CameraX)图像捕获后在片段之间导航时出现异常(CameraX)
【发布时间】:2021-03-03 06:41:05
【问题描述】:

我正在使用 Camerax 来捕捉图像。但我想在相机捕捉成功后导航到另一个片段。

我正在使用此代码。

  imageCapture.takePicture(
                outputOptions, cameraExecutor, object : ImageCapture.OnImageSavedCallback {
                    override fun onError(exc: ImageCaptureException) {
                        Log.e(TAG, "Photo capture failed: ${exc.message}", exc)
                    }

                    override fun onImageSaved(output: ImageCapture.OutputFileResults) {
                        val savedUri = output.savedUri ?: Uri.fromFile(photoFile)
                        Log.d(TAG, "Photo capture succeeded: $savedUri")
                        val capturedFileArray = ArrayList<GalleryItems>()
                        capturedFileArray.add(
                            GalleryItems("image",photoFile.absolutePath,false)
                        )
                        val bundle = Bundle()
                        bundle.putParcelableArrayList("selected_images", capturedFileArray)
                        findNavController().navigate(
                            R.id.action_cameraFragment_to_submitPostFragment,
                            bundle
                        )
                    }
                })

图像已成功捕获并保存。但在导航部分出现错误

E/AndroidRuntime: FATAL EXCEPTION: pool-2-thread-1
    Process: com.example.travelinsta, PID: 27221
    android.util.AndroidRuntimeException: Animators may only be run on Looper threads
        at android.animation.ValueAnimator.start(ValueAnimator.java:1035)
        at android.animation.ValueAnimator.start(ValueAnimator.java:1089)
        at android.animation.ObjectAnimator.start(ObjectAnimator.java:852)
        at androidx.navigation.ui.AbstractAppBarOnDestinationChangedListener.setActionBarUpIndicator(AbstractAppBarOnDestinationChangedListener.java:132)
        at androidx.navigation.ui.AbstractAppBarOnDestinationChangedListener.onDestinationChanged(AbstractAppBarOnDestinationChangedListener.java:110)
        at androidx.navigation.NavController.dispatchOnDestinationChanged(NavController.java:504)
        at androidx.navigation.NavController.navigate(NavController.java:1142)
        at androidx.navigation.NavController.navigate(NavController.java:944)
        at androidx.navigation.NavController.navigate(NavController.java:877)
        at androidx.navigation.NavController.navigate(NavController.java:863)
        at com.example.travelinsta.ui.camera.CameraFragment$updateCameraUi$2$$special$$inlined$let$lambda$1.onImageSaved(CameraFragment.kt:230)
        at androidx.camera.core.ImageCapture$2.onImageSaved(ImageCapture.java:843)
        at androidx.camera.core.ImageSaver.lambda$postSuccess$1$ImageSaver(ImageSaver.java:299)
        at androidx.camera.core.-$$Lambda$ImageSaver$29vxg6qyjKwPRXgWrIwgYVInWKE.run(Unknown Source:4)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)

请帮忙。提前致谢。

【问题讨论】:

    标签: android kotlin android-camerax


    【解决方案1】:

    在 UI Thread 中调用 findNavController().navigate,例如在下面使用

                new Handler(Looper.getMainLooper()).post(new Runnable(){
                    public void run(){
                        findNavController().navigate(
                                R.id.action_cameraFragment_to_submitPostFragment,
                                bundle
                        );
                    }
                });
    

    或者如果你在Activity,你可以使用runOnUiThread(new Runnable(){...});

    编辑:抱歉,Java 代码,我刚刚意识到你在 Kotlin 中

    Handler(Looper.getMainLooper()).post {
        findNavController().navigate(
            R.id.action_cameraFragment_to_submitPostFragment,
            bundle
        )
    }
    

    【讨论】:

    • 这不起作用。添加此代码后我无法获取资源参考
    • 你能显示这个错误吗,你的 IDE 说什么?它仍然是相同的资源引用,没有办法添加Handler/Runnable 使资源无法解析...
    • 由于 Java 到 kotlin 的转换错误(由 Android Studio 转换)而发生该错误。现在它对我有用。谢谢
    • 如果有帮助,请考虑更新/接受答案 :) 祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    相关资源
    最近更新 更多