2013-01-22 17 views
5

Używam Rhino w android do wykonywania kodu JavaScript funkcji w systemie Android (Java) i uzyskać wynik z tego kodu, ale mam ten wyjątekandroid błąd Rhino nie może załadować pliku tego typu klasy

01-22 11: 33: 57,063: E/Android Runtime (29175): Spowodowany przez: java.lang.UnsupportedOperationException: nie można załadować pliku tego typu klasy

to jest mój kod

String test = "function abc(x,y) {return x+y;}"; 
    org.mozilla.javascript.Context context = org.mozilla.javascript.Context.enter(); 
    try { 
     ScriptableObject scope = context.initStandardObjects(); 
     Scriptable that = context.newObject(scope); 
     Function fct = context.compileFunction(scope, test, "script", 1, null); 
     Object result = fct.call(context, scope, that, new Object[] { 2, 3 }); 
     Log.i("JML...Info", "jajajajaj = " + org.mozilla.javascript.Context.jsToJava(result, int.class)); 
    } finally { 
     org.mozilla.javascript.Context.exit(); 
    } 

Mam wyjątek od metody

Funkcja fct = context.compileFunction (scope, test, "script", 1, null);

Napisałem ten kod w metodzie onCreate() po załadowaniu widoku i używam rhino1_7R2.jar jako słoik dla Rhino.

Proszę mi pomóc i jeśli znasz jakiś inny sposób na uzyskanie wartości z JavaScript (zwracana wartość funkcji) w Androidzie, proszę o poradę.

Dzięki

Odpowiedz

3

miałem ten sam problem i znalazłem rozwiązanie tutaj: Problems using Rhino on Android

Domyślnie nosorożec spróbuje zrobić optymalizację poprzez generowanie kodu bajtowego JVM w locie. Android nie uruchamia kodu bajtowego JVM byt Dalvik bytecode. Dlatego trzeba wyłączyć optymalizacja:

context.setOptimizationLevel(-1); 

poważaniem

+0

gdzie ta metoda? Nie pojawia się w kontekście "kontekst" – Ixx

+0

kontekst jest obiektem "org.mozilla.javascript.Context". Upewnij się, że używasz właściwego typu. –