当前位置: 首页 > 知识库问答 >
问题:

Kotlin-常量的未解析引用

毛峻
2023-03-14

我试图使用新的相机硬件API(android.hardware.camera2)的示例代码为我的Android应用程序。首先,我通过Android Studio的静态编程语言插件的自动转换功能将Java代码转换为静态编程语言代码。下面是一段转换后的代码:

private val mCaptureCallback = object : CameraCaptureSession.CaptureCallback() {

    private fun process(result: CaptureResult) {
        when (mState) {
            STATE_PREVIEW -> {
            }// We have nothing to do when the camera preview is working normally.
            STATE_WAITING_LOCK -> {
                val afState = result.get(CaptureResult.CONTROL_AF_STATE)
                if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState || CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) {
                    // CONTROL_AE_STATE can be null on some devices
                    val aeState = result.get<Int>(CaptureResult.CONTROL_AE_STATE)
                    if (aeState == null || aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) {
                        mState = STATE_WAITING_NON_PRECAPTURE
                        captureStillPicture()
                    } else {
                        runPrecaptureSequence()
                    }
                }
            }
            STATE_WAITING_PRECAPTURE -> {
                // CONTROL_AE_STATE can be null on some devices
                val aeState = result.get<Int>(CaptureResult.CONTROL_AE_STATE)
                if (aeState == null || aeState == CaptureResult.CONTROL_AE_STATE_PRECAPTURE || aeState == CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED) {
                    mState = STATE_WAITING_NON_PRECAPTURE
                }
            }
            STATE_WAITING_NON_PRECAPTURE -> {
                // CONTROL_AE_STATE can be null on some devices
                val aeState = result.get<Int>(CaptureResult.CONTROL_AE_STATE)
                if (aeState == null || aeState != CaptureResult.CONTROL_AE_STATE_PRECAPTURE) {
                    mState = STATE_PICTURE_TAKEN
                    captureStillPicture()
                }
            }
        }
    }

我得到了未解决的引用错误:

CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED
CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED
CaptureResult.CONTROL_AE_STATE_CONVERGED
CaptureResult.CONTROL_AE_STATE_PRECAPTURE
CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED

但是这些常数在原始Java代码中是可以识别的。这些错误有什么解决办法吗?

共有1个答案

卢知
2023-03-14

这些变量在CameraMetadata中声明。在Kotlin中,不能对子类调用静态变量和方法。

 类似资料:
  • 我试图将我的android项目迁移到使用gradle kotlin dsl,将所有的build.gradle文件替换为build.gradle.kts文件,并在那里使用kotlin。以前,我曾经有一个kotlin文件,其中包含具有库和版本常量的对象元素(在buildSrc->src->main->kotlin中),例如:

  • 当我尝试构建时,ide抛出错误:“未解析的引用:X” X是(公共)类Java上的任何Java常量(公共静态final) 无法使用: 我尝试过: 这是一个混合项目,Java 我可以使用静态方法,例如: 错误行: 我正在使用: Gradle配置 软件 堆栈跟踪:

  • 我一直得到错误"未解决的引用:绑定"。有人知道我错过了什么吗?我已经试着更新了一切。但是绑定不起作用。 建筑格拉德尔。(module.app):

  • 这一行: 给我错误。 我的项目创建过程非常基本:在Intellij idea中:

  • 我使用新的数据绑定库在Java编写了以下片段类 它的编译和运行都很好。 我尝试用Kotlin重写它,并得出以下结论: 但现在步骤输出以下内容: 错误:(16,38)未解析引用:DataBinding 错误:(37,27)未解析引用:FragmentDataBinding 我如何使用android-databinding库与Kotlin? 我的顶级: 应用程序目录中的我的(仅相关部分): 我使用的是