2013-03-09 74 views
5

我嘗試在IBM worklight中創建一個cordova插件。Cordova.exec函數不運行本地函數

的Javascript:

HelloWorld = {  
    sayHello: function (success, fail, resultType) { 
     Cordova.exec( 
      success, 
      fail, 
      "HelloWorld", 
      "HelloWorld", 
      [resultType] 
    ); 
    } 
}; 

function callFunction() { 
    HelloWorld.sayHello(basarili, basarisiz, "sinan"); 
} 

的Java:

package com.Cordova1; 
import org.apache.cordova.api.CordovaPlugin; 
import org.json.JSONArray; 

import android.util.Log; 
public class HelloWorld extends CordovaPlugin { 
    public boolean execute(String arg0, JSONArray arg1, String arg2) { 
     Log.d("HelloPlugin", "Hello, this is a native function called from PhoneGap/Cordova!"); 
     return true; 
    } 
} 

當我打電話callFunction我看到失敗的功能工作。另外,我在日誌窗口中看不到任何HelloPlugin消息。 我能做什麼?

回答

4

模塊09_3樣本中的ApacheCordovaPlugin確實使用了棄用的Plugin類而不是CordovaPlugin。我已經重寫了模塊09_3中的HelloWorldPlugin類,以消除已棄用的Cordova Plugin API使用情況。該示例工作正常。

package com.AndroidApacheCordovaPlugin; 

import org.apache.cordova.api.CallbackContext; 
import org.apache.cordova.api.CordovaPlugin; 
import org.json.JSONArray; 
import org.json.JSONException; 

public class HelloWorldPlugin extends CordovaPlugin { 

    @Override 
    public boolean execute(String action, JSONArray arguments, 
      CallbackContext callbackContext) throws JSONException { 

     if (action.equals("sayHello")) { 
      String responseText = "Hello world"; 
      try { 
       responseText += ", " + arguments.getString(0); 
       callbackContext.success(responseText); 
       return true; 
      } catch (JSONException e) { 
       callbackContext.error(e.getMessage()); 
      } 
     } else { 
      callbackContext.error("Invalid action: " + action); 
      return false; 
     } 
     return false; 
    } 
} 
2

有幾件事情,1)你有沒有爲你的插件添加一行到config.xml文件? 2)你似乎在重寫CordovaPlugin中的錯誤方法。它應該是:

public boolean execute(String action, JSONArray args, CallbackContext callbackContext) 
+0

是的,我在config.xml中添加了一行。 我試過了你說的第二個,但我又看到了同樣的東西。 – gumust 2013-03-10 07:09:02

0

我遇到了同樣的問題。看看示例中的模塊09_3 ApacheCordovaPlugin。這個例子確實對我有效,但他們正在使用已棄用的Plugin類而不是CordovaPlugin

import org.apache.cordova.api.Plugin; 
import org.apache.cordova.api.PluginResult; 

... 

public class HelloWorldPlugin extends Plugin { 

    public PluginResult execute(String action, JSONArray arguments, String callbackId) { 

棄用的類返回PluginResult,不是boolean。我已經嘗試使用CordovaPlugin簽名的相同代碼,並且每次都會導致失敗。顯然,無論WL代碼調用的插件顯然期望不贊成類的簽名。

+0

我看了09_3 ApacheCordovaPlugin,我嘗試了這個,現在我又試了一次,但是這個項目每次都會導致失敗。 你有沒有一個適合你的例子? 謝謝。 – gumust 2013-03-10 18:32:42

+0

對不起,但09_3 ApacheCordovaPlugin對我來說並不起作用,並且覆蓋CordovaPlugin的上述重寫版本也可以使用。他們在模擬器中直接在設備上工作。你不是試圖在瀏覽器模擬器中運行它嗎?這是行不通的。 – 2013-03-12 19:30:34

0

我解決了這個問題。 我使用2.4版本的cordova。我不明白爲什麼它不起作用。當我使用「cordova.exec」它不起作用,但是當我使用PhoneGap.exec時,它可以工作。

另外我找了定義; 在cordova-2.4.0.js的最後一行中,它表示 var PhoneGap = cordova; 好的,Phonegap被定義,但我不知道爲什麼科爾多瓦不工作。

謝謝你的回答。