2013-03-09 38 views
5

Provo a creare un plug-in Cordova in worklight IBM.La funzione Cordova.exec non esegue la funzione nativa

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; 
    } 
} 

Quando chiamo CallFunction vedo che funzione fail ha funzionato. Inoltre, non riesco a vedere alcun messaggio HelloPlugin nella finestra del registro. Cosa posso fare?

risposta

4

modulo 09_3 ApacheCordovaPlugin negli esempi utilizza effettivamente la classe Plugin deprecato anziché CordovaPlugin. Ho riscritto la classe HelloWorldPlugin nel modulo 09_3 per eliminare l'uso deprecato dell'API del plug-in Cordova. Il campione sta funzionando bene.

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

Un paio di cose, 1) hai aggiunto una riga per il tuo plugin nel file config.xml? e 2) sembra che tu stia ignorando il metodo sbagliato in CordovaPlugin. Dovrebbe essere:

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

Sì, ho aggiunto una riga in config.xml. Ho provato il secondo che hai detto, ma vedo di nuovo le stesse cose. – gumust

0

Avevo lo stesso problema. Dai uno sguardo al modulo 09_3 ApacheCordovaPlugin nei campioni. Questo esempio funziona per me, ma stanno utilizzando la classe deprecata Plugin anziché 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) { 

La classe deprecato ritorna PluginResult, non un boolean. Ho provato lo stesso codice usando la firma CordovaPlugin e il risultato è un fallito ogni volta. Apparentemente qualunque sia il codice WL che sta invocando il plug-in è apparentemente in attesa della firma della classe deprecata.

+0

Ho guardato il 09_3 ApacheCordovaPlugin, l'ho provato e ci ho provato ancora, ma il progetto continua a fallire ogni volta. Hai un esempio che funziona con questo in mano? Grazie. – gumust

+0

Scusa, ma 09_3 ApacheCordovaPlugin funziona per me, e anche la versione riscritta sopra che estende CordovaPlugin funziona. Funzionano nell'emulatore e direttamente su un dispositivo. Non stai cercando di eseguirlo nel simulatore del browser, vero? Non funzionerà. –

0

Ho risolto il problema. Io uso la versione 2.4 di cordova. Non riesco a capire perché non ha funzionato. quando uso "cordova.exec" non funziona, tuttavia quando uso PhoneGap.exec funziona.

Anche io ho cercato la definizione; Nell'ultima riga di cordova-2.4.0.js, si dice var PhoneGap = cordova; Ok, PhoneGap è stato definito, ma non so perché Cordova non funzioni.

Grazie per le vostre risposte.

Problemi correlati