我尝试在IBM工作灯中制作一个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时,我看到失败函数有效。此外,我在日志窗口中看不到任何HelloPlugin消息。 我该怎么办?
答案 0 :(得分:5)
模块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;
}
}
答案 1 :(得分:2)
有几件事,1)你是否为插件添加了一行到config.xml文件中? 2)你似乎在CordovaPlugin中重写了错误的方法。它应该是:
public boolean execute(String action, JSONArray args, CallbackContext callbackContext)
答案 2 :(得分: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代码调用什么插件,显然都希望签署已弃用的类。
答案 3 :(得分:0)
我解决了这个问题。 我使用的是版本2.4的cordova。我无法理解为什么它不起作用。当我使用“cordova.exec”时,它不起作用,但是当我使用PhoneGap.exec时,它可以工作。
我也找了定义; 在cordova-2.4.0.js的最后一行,它说 var PhoneGap = cordova; 好的,Phonegap已定义,但我不知道为什么cordova不起作用。
感谢您的回答。