2016-04-07 10 views
0

Ich benutze Rhino-Bibliothek, um JavaScript-Funktionen in Android auszuführen. Ich habe eine Javascript-Funktion, wie,Wie bekomme ich Werte von einer Java HashMap in JavaScript-Funktion mit Rhino

var exucuteJS = function(controlValues) { 
var valueSelected = controlValues['country']; 
valueSelected = valueSelected.toUpperCase(); 
switch (valueSelected) { 
    case "INDIA": 
     return "IND_HOME"; 
    case "NEPAL": 
     return "NEP_HOME"; 
    default: 
     return "DEF_HOME" 
} 
} 

ich ein Java HashMap-Objekt als Parameter bin vorbei, sagen controlValues ​​auf die Funktion executeJS. Das Problem ist, der Rhino cant JavaScript-Code, um den Wert aus dem Schlüssel zu erhalten.

var valueSelected = controlValues['country']; 

Der Rückgabewert ist nicht definiert.

es mit dieser Linie funktioniert gut,

var valueSelected = controlValues.get('country'); 

aber es ist nicht gültig JavaScript-Code.

Das gleiche Javascript ist sowohl in Android und iOS ausgeführt werden. Die obige Zeile wird in iOS nicht unterstützt. Bitte vorschlagen. Ich verwende die neueste Version von Rhino.

+0

i did not undestand warum Downvoted. Anforderung wird für verschiedene Personen unterschiedlich sein. Down Voting ohne das gleiche zu verstehen ist sehr widerlich – AndEngine

Antwort

1

Endlich fand ich die Antwort.

Anstatt eine HashMap an die JavaScript-Funktion zu senden, müssen Sie sie als JSONObject senden. Nicht wie ein normales JSONObject-Objekt, sondern als ein Objekt in Form eines NativeJSON-Objekts.

Object nativeJsonObject= NativeJSON.parse(rhino,scope,controlValueJsonString,new NullCallable()); 

wo Nashorn - Context-Objekt Rhino. scope - Scriptable-Objekt controlValueJsonString - JSON-Zeichenfolge, die der HashMap entspricht. (ControlValueJsonString = new Gson() toJson (Hashmap).)

NullCallable ist eine Klasse von Callable implementiert, (Paket von Nashörnern org.mozilla.javascript.Callable)

diese 'nativeJsonObject' soll übergeben werden zu JavaScript-Funktion.

Object[] params = new Object[] { controlValues }; 

aus einem JSON-Objekt, JavaScript, die Werte wie bekommen

var valueSelected = controlValues['country']; 

das für mich arbeitet. Wirklich ich weiß nicht, warum unten zu dieser Frage gestimmt hat. Administratoren, bitte beachten Sie dieses Problem.

0

Die einzige Möglichkeit, auf Daten eines komplexen Objekts zuzugreifen, ist die Verwendung seiner Schnittstelle. Sie müssen separate Lösungen für Android und iOS erstellen.

Der Operator typeof sollte Ihnen helfen, zwischen diesen Fällen zu wechseln.

+0

Meine Anforderung ist es, das oben erwähnte Javascript in Android laufen. get() -Methode ist rein Java. Warum führt es die Methode hashmap ['key'] nicht aus, um einen Wert von hashmap – AndEngine

+0

zu erhalten, weil eine Map kein js-Objekt ist.Die Werte werden nicht in Feldern gespeichert. – F43nd1r

+0

gibt es einen Weg, dies zu erreichen. Ich habe eine Java HashMap, muss an Javascript Funktion gesendet werden. – AndEngine

0

Einfachere Lösung, wo Sie müssen keine NullCallable Klasse implementieren ist

new JsonParser(context, scope).parseValue("{\"this is\":\"JSON\"}"); 

, die ich bei Rhino: return JSON from within Java gefunden