【问题标题】:Phonegap: JS call to Java Method works only in 1 casePhonegap:JS 调用 Java 方法仅在 1 种情况下有效
【发布时间】:2013-07-11 13:39:54
【问题描述】:

我正在开发一个 Phonegap 项目,我正处于使用自定义插件扩展 Phonegap 的基本功能的阶段。我遇到的愚蠢问题是让插件做出正确反应。如果使用“echo”参数调用插件,则应返回其匹配的参数名称,“echo2”也是如此。

奇怪的部分:

'echo' 返回预期的答案(它执行成功回调),而 'echo2' 变体返回错误回调。真的没有想法了......

JS定义:相同的功能(只有第4个参数不同)

window.echo = function(str, callback) {
            cordova.exec(callback, function(err) {
                    callback('Nothing to echo.');
                    }, 'Echo', 'echo', [str]);
       };

window.sync = function(str, callback) {
            cordova.exec(callback, function(err) {
                    callback('Nothing to echo.');
                    }, 'Echo', 'echo2', [str]);
       };

JS 调用这些函数:

echo('Echo String', function(echoValue) {
      alert(echoValue);
});

sync('Sync String', function(echoValue) {
      alert(echoValue);
});

Java 类:

public class Echo extends CordovaPlugin {
    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        switch(action) {

            case "echo":    String message = args.getString(0);
                            this.echo("Call on: Echo.echo()" + message, callbackContext);
                            return true;

            case "echo2":   String message = args.getString(0);
                            this.echo("Call on: Echo.echo2()" + message, callbackContext);
                            return true;
        }
        return false;
    }

    private void echo(String message, CallbackContext callbackContext) {
        if (message != null && message.length() > 0) { 
            callbackContext.success(message);
        } else {
            callbackContext.error("Expected one non-empty string argument.");
        }
    }
}

【问题讨论】:

  • 好吧,一方面,echoecho2 在你的开关中应该是双引号,而不是单引号(在 Java 文件中)。而且,我认为你想要的是String message,而不是String.message。第三,这是没有意义的,因为您可能会收到错误回调的唯一情况是message 是非空且非空的,但 不能 发生在代码 sn-p你给了
  • 是的,双引号和字符串消息已更新。谢谢@ColinMorelli。类中的错误回调将在稍后发挥作用......以相同的结果重建......

标签: java javascript cordova phonegap-plugins


【解决方案1】:

对于所有遇到类似问题的人,这里有一些关于为什么这不起作用的信息:

首先:代码运行良好 - 问题不在这里。

哪里出了问题?

当我问这个问题时,Java Class 被命名为 Echo,它在调用类方法时起作用。尝试调用任何其他方法失败,因为

Phonegap Build Service 不允许直接包含插件

但是在我的情况下它仍然部分工作,因为 Java Class Echo 恰好是 Phonegap Build 为我提供的标准插件。

Phonegap Build 包含的这个 Echo 插件恰好有一个 echo 方法,显然会导致成功回调。

进一步阅读后:

一个名为plugman的工具(也是由Adobe开发的)通过将创建的插件添加到phonegap项目来处理自定义插件实现......我仍在测试和学习这个,官方信息(并且只有我找到的信息)可用这里:

Leads to the deprecated pluginstall tool

Plugman Tool Repo - GitHub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多