2016-11-30 17 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