7

IBM worklight で cordova プラグインを作成しようとしています。

Javascript:

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

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

ジャワ:

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 メッセージが表示されません。私に何ができる ?

4

4 に答える 4

5

サンプルのモジュール09_3ApacheCordovaPluginは、実際、CordovaPluginの代わりに非推奨のPluginクラスを使用しています。非推奨のCordovaプラグインAPIの使用を排除するために、モジュール09_3のHelloWorldPluginクラスを書き直しました。サンプルは正常に機能しています。

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;
    }
}
于 2013-03-10T19:29:39.920 に答える
2

いくつかのこと、1) プラグインの行を config.xml ファイルに追加しましたか? 2) CordovaPlugin で間違ったメソッドをオーバーライドしているようです。そのはず:

public boolean execute(String action, JSONArray args, CallbackContext callbackContext)
于 2013-03-10T05:04:50.503 に答える
0

私は問題を解決しました。私はcordovaのバージョン2.4を使用しています。なぜうまくいかなかったのか理解できません。「cordova.exec」を使用すると機能しませんが、PhoneGap.execを使用すると機能します。

また、私は定義を探しました。cordova-2.4.0.jsの最後の行には、var PhoneGap=cordova;と書かれています。わかりました。Phonegapが定義されましたが、cordovaが機能しない理由がわかりません。

ご回答ありがとうございます。

于 2013-03-13T23:18:43.190 に答える
0

私は同じ問題を抱えていました。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ではなく を返しますbooleanCordovaPlugin署名を使用して同じコードを試しましたが、毎回失敗します。どうやら、プラグインを呼び出している WL コードは、非推奨クラスの署名を期待しているようです。

于 2013-03-10T16:09:15.923 に答える