gpt4 book ai didi

android - Cordova 将参数错误地传递给 native

转载 作者:行者123 更新时间:2023-11-29 01:30:00 26 4
gpt4 key购买 nike

我在执行 Cordova 自定义插件并将参数传递给它时遇到了一些问题。我正在使用函数 cordova.exec(callback, errCallback, pluginName, pluginAction, pluginArgs),像这样:

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 正在调用我的插件:公共(public) bool 执行(字符串操作,字符串 rawArgs,CallbackContext callbackContext)这很好。

但是,我还想将字符串和 jsonarray 传递给我的插件。不幸的是,无论我传递给 cordova.exec,总是执行 for (..., String rawArgs, ...) 被调用,所以:

  • cordova.exec(..., "test") 调用以 "test" 作为 rawArgs 但带有双引号执行!到底是什么……

  • cordova.exec(..., [{ id: 1, value: "test1"}, { id: 1, value: "test1"}] calls execute with [{"id":891,"value":"test891"},{"id":891,"value":"test891"}] 作为字符串...

看起来调用我的函数 log(...) 是在做一些奇怪的类型转换。但是我只能使用 string[] 作为一种类型直接调用 cordova.exec,但是当我调用 cordova.exec(..., [ "test"]) 它应该使用 jsonarray 作为带有一个字符串元素的参数来调用 execute,但它正在使用值为 ["test"]

的字符串参数调用执行

那么问题来了,如何正确调用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:http://ge.tt/api/1/files/2CJwqVL2/0/blob?download

关于android - Cordova 将参数错误地传递给 native ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31723592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com