7

我尝试在 IBM worklight 中制作一个 cordova 插件。

Javascript:

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

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

爪哇:

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 时,我看到 fail 函数有效。此外,我在日志窗口中看不到任何 HelloPlugin 消息。我能做些什么 ?

4

4 回答 4

5

示例中的模块 09_3 ApacheCordovaPlugin 确实使用了已弃用的插件类而不是 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;
    }
}
于 2013-03-10T19:29:39.920 回答
2

有几件事,1)您是否在 config.xml 文件中为您的插件添加了一行?和 2) 你似乎覆盖了 CordovaPlugin 中的错误方法。它应该是:

public boolean execute(String action, JSONArray args, CallbackContext callbackContext)
于 2013-03-10T05:04:50.503 回答
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 代码显然都在期待已弃用类的签名。

于 2013-03-10T16:09:15.923 回答
0

我解决了这个问题。我使用的是cordova 2.4版。我不明白为什么它不起作用。当我使用“cordova.exec”时它不起作用,但是当我使用 PhoneGap.exec 时它起作用。

我也寻找定义;在 cordova-2.4.0.js 的最后一行,它说 var PhoneGap = cordova; 好的,Phonegap 已定义,但我不知道为什么 cordova 不起作用。

谢谢您的回答。

于 2013-03-13T23:18:43.190 回答