Java 代号为1且lambda不工作的Android本机代码

Java 代号为1且lambda不工作的Android本机代码,java,android,codenameone,Java,Android,Codenameone,我的应用程序代码为One,具有摄像头预览功能。我需要借助本机接口实现(到目前为止,Android)来显示此预览。在一些(较旧的)Android设备上,我还需要调用Camera.autofocus(AutofocusCallback)进行清晰的预览 Android studio建议我使用lambda表达式来定义回调: mCamera.autoFocus((b, camera) -> Log.d(TAG, "Camera may have focused")); 当我调试我的项目时,它工作

我的应用程序代码为One,具有摄像头预览功能。我需要借助本机接口实现(到目前为止,Android)来显示此预览。在一些(较旧的)Android设备上,我还需要调用
Camera.autofocus(AutofocusCallback)
进行清晰的预览

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

mCamera.autoFocus((b, camera) -> Log.d(TAG, "Camera may have focused"));
当我调试我的项目时,它工作

但是,当我在Codename One本机接口实现中复制粘贴这段代码并发送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");
                }
            });
我不能在本机接口实现中使用lambda,而在代码名为1的代码中它可以完美地工作吗


感谢您的帮助,

lambda是Java 8的一个特性。您的代号为one的项目是Java8项目吗?文档建议您必须通过将build.xml中的“source”和“target”值设置为1.8,并将构建提示Java.version=8来显式启用Java8。 还有一些其他建议,用于检查ide使用的java版本:

Yes@Frank Lauterwald我的项目是一个Java 8项目。在我的表单中使用Lambda表达式,例如定义按钮动作。只有在本机接口实现中使用lambda时,构建才会失败。本机代码当前未实现此功能,因此我们不会破坏现有的Android本机代码。然而,最新的Android SDK引入了一种单独的方法来使用Java 8(这是在我们引入Java 8支持之后出现的),因此我们添加了构建提示来尝试启用这种支持,这没有经过测试,只能在本周五提供。您可以使用
android.java8=true
build提示进行尝试,并告诉我们它是否有效谢谢@Shai我会在测试完这个新的构建提示后立即通知您!在CodenameOne设置窗口中,我添加了值为“true”的键“android.java8”,并添加了lambda代码,但收到了
/build.gradle]:64:意外标记:}@line 64,column 1.}发送生成时。如果我删除构建提示并让lambda代码由于我原始问题中描述的错误而不编译,并且如果我最终删除lambda,它会编译得很好。所以我猜键/值没有按预期输入,是吗?