2013-03-09 5 views
5

私はIBMワークライトでコード・プラグインを作成しようとしています。Cordova.exec関数がネイティブ関数を実行しません

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を呼び出すと、私は機能が働い失敗していることがわかります。また、ログウィンドウにHelloPluginメッセージが表示されません。 どうすればいいですか?

答えて

4

モジュール09_3サンプルのApacheCordovaPluginは、実際にはCordovaPluginではなく廃止予定のPluginクラスを使用しています。私はモジュール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

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

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

はい私はconfig.xmlに行を追加しました。 私はあなたが言った第2のものを試しましたが、私は同じことをもう一度見ます。 – gumust

0

私は同じ問題を抱えていました。サンプルの中にモジュール09_3 ApacheCordovaPluginを見てください。その例は私のために働くが、彼らはCordovaPluginの代わりに廃止予定のPluginクラスを使用している。

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署名を使用して同じコードを試しましたが、が毎回に失敗します。明らかに、WLコードがプラグインを呼び出すのは、廃止されたクラスの署名を期待しているようです。

+0

09_3 ApacheCordovaPluginを見ましたが、これを試してみましたが、もう一度試しましたが、プロジェクトは毎回失敗します。 これはあなたの手で動作する例がありますか? ありがとうございます。 – gumust

+0

申し訳ありませんが09_3 ApacheCordovaPluginは私のために働きます。また、上記のCordovaPluginを拡張したリライト版も動作します。彼らはエミュレータで直接デバイス上で動作します。あなたはブラウザシミュレータで実行しようとしていませんか?それは動作しません。 –

0

私はこの問題を解決しました。 私はcordovaのバージョン2.4を使用します。なぜそれがうまくいかないのか分かりません。 "cordova.exec"を使用すると動作しませんが、PhoneGap.execを使用すると動作します。

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

ありがとうございました。

関連する問題