java - Codename One 中带有 lambda 的 Android native 代码无法正常工作

标签 java android codenameone

我使用代号 One 构建的应用程序具有相机预览功能。我需要求助于 native 接口(interface)实现(目前为 Android)来显示此预览。在某些(较旧的)Android 设备上,我还需要调用 Camera.autofocus(AutofocusCallback) 来进行清晰的预览。

Android studio 建议我使用 lambda 表达式来定义回调:

mCamera.autoFocus((b, camera) -> Log.d(TAG, "Camera may have focused"));

当我调试我的项目时,它起作用了。

但是,当我在 Codename One 本地接口(interface)实现中复制粘贴这段代码并发送 Android 构建时,构建过程失败并出现以下错误:

error: ')' expected
            mCamera.autoFocus((b, camera) -> Log.d(TAG, "Camera may have focused"));
                                ^
error: illegal start of expression
            mCamera.autoFocus((b, camera) -> Log.d(TAG, "Camera may have focused"));
                                           ^
error: ';' expected
            mCamera.autoFocus((b, camera) -> Log.d(TAG, "Camera may have focused"));

为了获得构建,我必须将 lambda 转换为更传统的:

mCamera.autoFocus(new Camera.AutoFocusCallback() {
                @Override
                public void onAutoFocus(boolean b, Camera camera) {
                    Log.d(TAG, "Camera may have focused");
                }
            });

我不能在 native 接口(interface)实现中使用 lambda 而它在代号一代码中完美运行吗?

感谢任何帮助,

最佳答案

Lambda 是 Java 8 的特性。您的代号 one 项目是 Java 8 项目吗?该文档建议您必须通过将 build.xml 中的“源”和“目标”值设置为 1.8 以及设置构建提示 java.version=8 来显式启用 Java 8。 还有一些其他建议检查您的 ide 使用的 java 版本: https://www.codenameone.com/blog/java-8-support.html

关于java - Codename One 中带有 lambda 的 Android native 代码无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40886260/

相关文章:

android - 如何通过android访问远程服务器存储和检索文件

java - 异常 : java. lang.NoClassDefFoundError - org/json/simple/JSONValue

ios - 代号一中的 BackgroundFetch

codenameone - 应用程序仪表板和工具栏的代号为一的图表

java - 使用 GridBagLayout 定位

java - eclipse 看不到我的 lenovo S650 手机

android架构组件: What is the alternative to fragment container in android architecture navigation?

android - Gradle 同步失败 : Cause: org/gradle/listener/ActionBroadcast

java - JPA @PreUpdate 未被调用

java - java 6 中的二进制值