Android Cordova将参数传递给本机错误
我对执行Cordova自定义插件和向其传递参数有一些问题。 我正在使用函数cordova.exec(callback、errCallback、pluginName、pluginAction、pluginArgs),如下所示:Android Cordova将参数传递给本机错误,android,cordova,cordova-plugins,Android,Cordova,Cordova Plugins,我对执行Cordova自定义插件和向其传递参数有一些问题。 我正在使用函数cordova.exec(callback、errCallback、pluginName、pluginAction、pluginArgs),如下所示: module BlankCordovaApp2 { "use strict"; export module Application { export function initialize() { document.addEventListener
module BlankCordovaApp2 {
"use strict";
export module Application {
export function initialize() {
document.addEventListener('deviceready', onDeviceReady, false);
}
function onDeviceReady() {
document.addEventListener('pause', onPause, false);
document.addEventListener('resume', onResume, false);
var r = Math.floor((Math.random() * 1000) + 1);
log({ id: r, value: "test" + r },
function () { alert('pass') },
function () { alert('fail') });
}
function log (log, callback, errCallback) {
cordova.exec(callback,
errCallback,
"LogstashLogger",
"LOGGER_SERVICE_ACTION_LOG",
log
);
};
function onPause() {
// TODO: This application has been suspended. Save application state here.
}
function onResume() {
// TODO: This application has been reactivated. Restore application state here.
}
}
window.onload = function () {
Application.initialize();
}
}
这样,cordova就调用了我的插件:
公共布尔执行(字符串操作、字符串rawArgs、CallbackContext CallbackContext)
这很好
不过,我还想将string和jsonarray传递给我的插件。不幸的是,无论我传递给cordova.exec的是什么,都会调用executefor(…,String rawArgs…),因此:
- cordova.exec(…,“test”)调用执行时使用“test”作为rawArgs,但使用双引号!到底是什么
- cordova.exec(…,[{id:1,value:“test1”},{id:1,value:“test1”}]调用执行时将[{id:891,value:“test891”},{id:891,value:“test891”}]作为字符串执行
所以问题是,如何正确调用cordova.exec?尝试以下方法: Javascript
var json1 = {foo: "bar"};
var json2 = {bar: "foo"};
cordova.exec(
successCallback,
errorCallback,
'MyPlugin',
'myAction',
[json1,json2]
);
Java
public class MyPlugin extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if ("myAction".equals(action)){
JSONObject json1 = args.getJSONObject(0);
JSONObject json2 = args.getJSONObject(1);
callbackContext.success();
}
return true;
}
}
更新
下面是一个工作示例项目,它演示了如何在Android平台上将JSON从Javascript传递到Java:Hello Dave,谢谢,但这正是我的问题。调用您的方法时,将使用字符串作为参数而不是JSONArray调用execute。此字符串的传递值为:[“{”foo\:“bar\”,“{”bar\:“foo\”]。我正在使用cordova tools for visual studio 2015 community。您好,再次抱歉我的错误,您不需要再对输入JSON进行字符串化,因为cordova现在为您执行此操作。我已相应地更新了我的答案。我不知道我的VS有什么问题:)我无法在我的项目中使用您的插件,因为名称空间cordova.plugins不可见-即使在构建项目之后。。。如果我试图通过将代码复制到index.js来运行您的src/www/plugin.js中的代码,我也无法构建项目,因为[json1,json2]无法转换为字符串[]。看起来我的cordova版本缺少一些cordova.exec构造函数。。。还是不知道怎么了。我已经删除了VS中的所有内容,再次安装了VS2013,并使用Apache Cordova 3.1的工具,而且始终会调用execute,并使用字符串作为参数,无论我在js的Cordova.exec中使用了什么参数。