java - 从 PhoneGap Plugin 获取返回值

标签 java android cordova phonegap-plugins

我构建了一个非常简单的 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 数据库中检索一些数据:

  1. 在 JavaScript 中调用“cordova.exec”。
  2. PhoneGap 将调用您的插件。
  3. 您的插件将返回 2 个东西: PhoneGap 的 boolean 值,定义它是否按预期工作。将传递给成功方法的数据。
  4. 这对我来说是棘手的部分。无论成功与否,您都必须创建 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/

相关文章:

java - setDefaultHighRepJobPolicyUnappliedJobPercentage(100) 真的有效吗?

android - android中 native 网络相关功能随机阻塞

android - Phonegap 文件下载到设备 - 采用哪个设备路径?

android - ROOM 无法弄清楚如何将此字段保存到数据库中

android - 如何使用flutter和kotlin在应用程序之外拥有小部件?

java - Phonegap 电子邮件撰写器

css - 面向 S5 和 Moto E 的 Cordova 应用程序

java - 导致内存不足异常的动画

java - 使用 Selenium java 和 Windows 操作系统的 URL 未在 headless (headless) chrome 中打开

java - 从 Java 导入到 C++ 包括