我构建了一个非常简单的 PhoneGap
插件来开始测试我将在 Android 上构建一些 native 操作的方式。
JavaScript:
function callNativePlugin() {
cordova.exec(nativePluginResultHandler, nativePluginErrorHandler, "Database", "saveAdvertencia", [ 1, "TesteAdv" ]);
}
function nativePluginResultHandler(result) {
alert("SUCCESS: \r\n" + result);
}
function nativePluginErrorHandler(error) {
alert("ERROR: \r\n" + error);
}
Java:
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("saveAdvertencia")) {
advertenciaDS = new AdvertenciaDS(cordova.getActivity());
callbackContext.sendPluginResult(new PluginResult(Status.OK, new JSONArray("test")));
return true;
}
return false;
}
我需要的是一种从同一方法中的操作中检索结果的方法。总是处理 3 种方法(1 执行 Action 。1 定义成功 Action 。1 定义错误 Action 。)当你不真正控制它们何时被调用时,这是非常复杂的,因为PhoneGap
在操作完成后调用它们。
如果我需要从 Android Native 数据库中检索一些数据:
- 在 JavaScript 中调用“cordova.exec”。
- PhoneGap 将调用您的插件。
- 您的插件将返回 2 个东西: PhoneGap 的 boolean 值,定义它是否按预期工作。将传递给成功方法的数据。
- 这对我来说是棘手的部分。无论成功与否,您都必须创建 2 个您无法控制何时调用它们的方法,因为 PhoneGap 将决定这一点。我该如何更改?
最佳答案
我使用这种模式只为插件提供的功能提供一个回调:
function callNativePlugin(callback) {
cordova.exec(function(result) {
callback(null, result);
}, function(result) {
callback("myerror");
}, "Database", "saveAdvertencia", [ 1, "TesteAdv" ])
};
这样你就可以获得 node.js 风格的回调,其中第一个参数是错误,第二个是结果:
//define the callback function
var callbackFunction = function(err, result) {
if (err) {
console.log("there was an error");
} else {
console.log("success", result);
}
};
//call the plugin
callNativePlugin(callbackFunction);
您无法避免在您的插件中有两个回调,因为这是 cordova API 强制要求的,但您不必将其公开给您的插件用户。
关于java - 从 PhoneGap Plugin 获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15548383/