2012-03-28 4 views
1

Ich bin auf einem Android-App arbeite „native in Java geschrieben“ und ich bin eine Antwort von einem Server immer die Antwort ist eine JavaScript-FunktionJavascript-Code in Android Ausführung „java“ Anwendung

Ich muß Verwenden Sie diese Funktion, um einige Berechnungen in meinem nativen Java-Code durchzuführen.

irgendwelche Ideen, wie dies zu tun ist.

Probe Antwort:

function logic_1(surveyString, responseValuesString) { 
    var survey = eval(surveyString); 
    var responseValues = eval(responseValuesString); 
    var target = new Object(); 
if (isChosen(128133225, responseValues)) { 
target.id = 2; 
} 
if (! target.id) { 
    target.id = 2; 
} 
    return target; 
} 
+0

Vielleicht könnte die Antwort das Ergebnis der Funktion sein oder ein Code, der angibt, dass eine Java-Funktion ausgeführt werden soll? – Joel

+0

welche Antwort erhalten Sie –

+0

die Antwort ist eine Javascript-Funktion –

Antwort

2

ich vorher habe verwendet Rhino erfolgreich zur Ausführung von JavaScript-Code unter Android:

+0

Ich bekomme Antwort als eine Funktion, die 2 Eingabeparameter nimmt .. kann ich diese Funktion von meinem Java-Code eingeben? Ich meine "Funktionslogik_1 (surveyString, responseValuesString)" eine Möglichkeit, diese 2 Parameter aus Java ?? –

+0

Ja, das ist kein Problem mit den Rhino-APIs. Diese Antwort beschreibt, wie es geht: http://stackoverflow.com/a/3996115/511012 –

+0

funktioniert perfekt! Danke okay, nur eine andere Frage ... Sie können sehen, dass die Funktion ein Objekt zurückgibt var target = new Object(); Ich konnte eine Ganzzahl, boolean, Zeichenfolge in der Rückkehr fangen, aber wie ein Objekt zu fangen? –

0

Vielleicht brauchen Sie nur eine JavaScript auto executing function wie diese verwenden:

(function(x, y){ 
    var result; 
    result = x + y; // do some calculations 
    return result; 
})(1 , 2); // you can set your parameters from Java 

und 1, 2 sind nur zwei Parameter von Java

1

Hier ist ein Beispiel dafür, wie Werte von einem komplexen Typ zurückzukehren:

String strFunction = 
     "function add(x,y){ " + 
      "return { " + 
       "id:x+y " + 
      "}; " + 
     "}"; 

Context context = Context.enter(); 
ScriptableObject scope = context.initStandardObjects(); 
context.evaluateString(scope, strFunction, "test", 1, null); 

Function functionAdd = (Function)scope.get("add"); 
NativeObject untypedResult = (NativeObject)functionAdd.call(context, scope, scope, new Object[] { 1, 2 }); 
double id = (Double)untypedResult.get("id", untypedResult); 

Der wichtigste Teil ist die letzten beiden Zeilen, in denen wir die JavaScript-Funktion aufrufen, behandeln das Ergebnis als Native und Rufen Sie dann den Wert der ID-Eigenschaft von diesem Objekt ab.

+0

versteht Ihren Code nicht. Kannst du bitte Erklären? –

+0

@VivekKumarSrivastava was verstehst du nicht? –

+0

Ist der obige Code für Android? –

Verwandte Themen