从PhoneGap插件获取返回值

Bar*_*rni 6 java android phonegap-plugins cordova

我构建了一个非常简单的PhoneGap插件来开始测试我将在Android上构建一些本机操作的方式.

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);
    }
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

我需要的是一种从同一方法中的动作中检索结果的方法.总是处理3个方法(1执行动作.1定义成功动作是什么.1定义什么是错误动作.)当你没有真正控制它们何时被调用时,这是非常复杂的,因为PhoneGap在操作完成后调用它们.

如果我需要从Android Native数据库中检索一些数据:

  1. 用JavaScript调用"cordova.exec".
  2. PhoneGap会调用你的插件.
  3. 你的插件将返回两件事:PhoneGap的一个布尔值,定义它按预期工作的一切.将传递给sucessfull方法的数据.
  4. 这对我来说是棘手的部分.如果成功与否,你必须创建两个你无法控制它们的方法,因为PhoneGap将决定它.我该如何改变?

Vla*_*rbu 5

我使用这个模式只对插件提供的函数进行一次回调:

function callNativePlugin(callback) {
   cordova.exec(function(result) {
       callback(null, result);
   }, function(result) {
       callback("myerror");
   }, "Database", "saveAdvertencia", [ 1, "TesteAdv" ])
};
Run Code Online (Sandbox Code Playgroud)

这样就得到了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);
Run Code Online (Sandbox Code Playgroud)

您无法避免插件中有两个回调,因为这是由cordova API强制要求的,但您不必将其暴露给您的插件用户.