【问题标题】:Cordova.exec function doesn't run the native functionCordova.exec 函数不运行本机函数
【发布时间】:2013-02-25 08:29:35
【问题描述】:

我尝试在 IBM worklight 中制作一个 cordova 插件。

Javascript:

HelloWorld = {     
  sayHello: function (success, fail, resultType) { 
      Cordova.exec( 
          success, 
          fail, 
          "HelloWorld", 
          "HelloWorld", 
           [resultType]
      );
   }
};

function callFunction() {
    HelloWorld.sayHello(basarili, basarisiz, "sinan");
}

Java:

package com.Cordova1;
import org.apache.cordova.api.CordovaPlugin;
import org.json.JSONArray;

import android.util.Log;
public class HelloWorld extends CordovaPlugin {
    public boolean execute(String arg0, JSONArray arg1, String arg2) {
        Log.d("HelloPlugin", "Hello, this is a native function called from PhoneGap/Cordova!"); 
        return true;
    }
}

当我调用 callFunction 时,我看到 fail 函数有效。此外,我在日志窗口中看不到任何 HelloPlugin 消息。 我能做什么?

【问题讨论】:

    标签: plugins cordova ibm-mobilefirst


    【解决方案1】:

    模块 09_3 示例中的 ApacheCordovaPlugin 确实使用了已弃用的插件类而不是 CordovaPlugin。我在模块 09_3 中重写了 HelloWorldPlugin 类,以消除已弃用的 Cordova Plugin API 使用。样品工作正常。

    package com.AndroidApacheCordovaPlugin;
    
    import org.apache.cordova.api.CallbackContext;
    import org.apache.cordova.api.CordovaPlugin;
    import org.json.JSONArray;
    import org.json.JSONException;
    
    public class HelloWorldPlugin extends CordovaPlugin {
    
        @Override
        public boolean execute(String action, JSONArray arguments,
                CallbackContext callbackContext) throws JSONException {
    
            if (action.equals("sayHello")) {
                String responseText = "Hello world";
                try {
                    responseText += ", " + arguments.getString(0);
                    callbackContext.success(responseText);
                    return true;
                } catch (JSONException e) {
                    callbackContext.error(e.getMessage());
                }
            } else {
                callbackContext.error("Invalid action: " + action);
                return false;
            }
            return false;
        }
    }
    

    【讨论】:

      【解决方案2】:

      有几件事,1) 您是否在 config.xml 文件中为您的插件添加了一行?和 2) 你似乎覆盖了 CordovaPlugin 中的错误方法。应该是:

      public boolean execute(String action, JSONArray args, CallbackContext callbackContext)
      

      【讨论】:

      • 是的,我在 config.xml 中添加了一行。 我试过你说的第二个,但我又看到了同样的东西。
      【解决方案3】:

      我遇到了同样的问题。查看示例中的模块09_3 ApacheCordovaPlugin。该示例确实对我有用,但他们使用已弃用的 Plugin 类而不是 CordovaPlugin

      import org.apache.cordova.api.Plugin;
      import org.apache.cordova.api.PluginResult;
      
      ...
      
      public class HelloWorldPlugin extends Plugin {
      
          public PluginResult execute(String action, JSONArray arguments, String callbackId) {
      

      不推荐使用的类返回PluginResult,而不是boolean。我已经使用CordovaPlugin 签名尝试了相同的代码,并且每次都会导致 fail。显然,调用插件的任何 WL 代码显然都在期待已弃用类的签名。

      【讨论】:

      • 我查看了 09_3 ApacheCordovaPlugin,我试过这个,现在我又试了一次,但项目仍然每次都失败。你手上有一个适用于此的例子吗?谢谢。
      • 抱歉,09_3 ApacheCordovaPlugin 确实对我有用,并且上面扩展 CordovaPlugin 的重写版本也适用。它们在模拟器中工作并直接在设备上工作。您不是要在浏览器模拟器中运行它吗?那是行不通的。
      【解决方案4】:

      我解决了这个问题。 我使用的是cordova 2.4版。我不明白为什么它不起作用。当我使用“cordova.exec”时它不起作用,但是当我使用 PhoneGap.exec 时它起作用。

      我也在寻找定义; 在 cordova-2.4.0.js 的最后一行,它说 var PhoneGap = 科尔多瓦; 好的,Phonegap 已定义,但我不知道为什么 cordova 不起作用。

      感谢您的回答。

      【讨论】:

        猜你喜欢
        • 2022-06-23
        • 1970-01-01
        • 2013-03-05
        • 1970-01-01
        • 2022-09-30
        • 2018-01-12
        • 2021-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多