Ich kann nicht herausfinden, wie man einen Wert zurück von einem Cordova-Plugin zurück auf die JavaScript-Bereich der App bekommen. Ich kann Werte einfach an das Plugin senden. Ich benutze Phonegap Build. Hier ist der Code:beim Aufruf einer Plugin-Methode von Phonegap App, Daten von nativen Android-Funktion zurückgegeben ist immer außerhalb des Geltungsbereichs (undefined)
das Plugin-javascript:
var exec = require('cordova/exec');
module.exports = {
getSomething: function(successCallback) { exec(successCallback,
null, "PluginName", "getSomething", []); } };
das Plugin-java:
import blah blah blah;
public class PluginName extends CordovaPlugin { public PluginName(){ }
public boolean execute(String action, JSONArray args, CallbackContext
callbackContext) throws JSONException {
if(action.equals("getSomething"))
{ this.getSomething(callbackContext); } } else { return false; }
return true; }
public void getSomething(CallbackContext callbackGetVol) { AndroidClass ac =
(AndroidClass)
this.cordova.getActivity().getSystemService(Context.SOME_SERVICE);
int data_needed = ac.androidGetMethod(parameters);
callbackGetVol.success(data_needed); callbackGetVol.error("error"); }
der JavaScript-App:
Dies funktioniert gut:
PluginName.getSomething(function(data_needed) {Log("data = " + data_needed);});
Aber hier app_variable ist immer „undefined“:
var app_variable;
PluginName.getSomething(function(data_needed) {app_variable = data_needed;});
Ich möchte in der App Javascript verwenden data_needed, aber es ist nur innerhalb der Grenzen des Callback-Körper definiert.
Ich habe versucht, eine Funktion übergeben, die in den Anwendungsbereich der App ist (und Variationen dieser):
var foo = function() {
var local_variable = 0;
return {
bar: function() {
PluginName.getSomething(function(local_variable){
return local_variable;});
}
};
}();
app_variable = foo.bar();
Aber „app_variable“ ist immer „undefined“. Was mache ich falsch?
Ich bin überrascht; Sie verwenden nicht die Funktion sendPluginResult ([Daten von Java zu Js]) auf Ihrem var callbackGetVol in getSomething (anstelle von Erfolg ([Daten von Java zu JS])); aber es sendet die Daten zurück, die zu deinem Javascript benötigt werden, also ist es nicht dein Problem, richtig? Sie möchten den von Java zurückgesendeten Inhalt innerhalb einer globalen Variablen in Javascript umwandeln? – nyluje
@apdobaj Sie haben mehrere Missverständnisse darüber, wie Cordova/Phonegap funktioniert. Wenn Sie das Java betrachten, tun Sie das Falsche. - Diese FAQ sollte auch helfen. Lies zuerst die fettgedruckten Sätze. [Top Mistakes von Entwicklern neu in Cordova/Phonegap] (https://github.com/jessemonroy650/top-phonegap-mistakes/blob/master/new-to-Phonegap.md) – JesseMonroy650
@ nyluje, habe ich versucht, die sendPluginResult zu verwenden wie: PluginResult dataResult = neues PluginResult (PluginResult.Status.OK, vol); dataResult.setKeepCallback (true); callbackGetVol.sendPluginResult (Datenergebnis); aber die Ergebnisse sind die gleichen. Das Phonegap-Build-Tool schien das Keyword "statisch" nicht zu mögen.Jesse, ich erkenne vollkommen, dass ich keine Best Practices verwende, aber ich versuche nur ein funktionierendes Proto mit dem Verständnis zu bekommen, dass es von jemandem neu geschrieben wird, der wirklich weiß, was sie tun. Es gibt eine Menge Infos in diesem Blog, von denen ich schon viel gesehen habe. – apdobaj