2016-11-30 64 views
1

使用Codename One构建的我的应用程序具有Camera预览。我需要使用Native Interface实现(到目前为止的Android)来显示此预览。在某些(较旧的)Android设备上,我还需要拨打Camera.autofocus(AutofocusCallback)进行锐利预览。Codename One中的Android本地代码,其中lambda不起作用

的Android工作室建议我用lambda表达式定义回调:

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

当我调试我的项目它wortks。

但是当我复制粘贴在代号为一个本地接口的实现这段代码,并发送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")); 

为了得到构建我必须转换拉姆达融入了更多的传统:

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

我不能用拉姆达的原生界面的实现,而它完美的作品在代号一个代码?

任何帮助表示赞赏,

回答

1

兰巴达斯是Java 8功能。您的代码名称是一个项目是Java 8项目吗?该文档建议您必须通过将build.xml中的“source”和“target”值设置为1.8以及设置构建提示java.version = 8来显式启用Java 8。 还有一些其他建议,检查你的IDE使用哪个java版本: https://www.codenameone.com/blog/java-8-support.html

+0

是@Frank Lauterwald我的项目是一个Java 8项目。在我的表单中使用Lambda表达式来定义按钮操作。只有在本地接口实现中使用lambda时,构建才会失败。 – HelloWorld

+1

目前尚未实施本地代码,因此我们不会破坏现有的Android本机代码。但是,最新的Android SDK引入了一种独立的方法来使用Java 8(这在我们引入Java 8支持后很好),因此我们添加了构建提示以尝试启用此支持,但未经测试且仅在本周五可以使用'android.java8 = true'构建提示来尝试它,并让我们知道它是否有效或者没有 –

+0

谢谢@Shai一旦我测试了这个新的构建提示,我会尽快发布! – HelloWorld