Как использовать ScriptEngineManager в Android?

import android.widget.Toast;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

 public void bEqual(View v) throws ScriptException {

       ScriptEngineManager mgr = new ScriptEngineManager();
       ScriptEngine engine = mgr.getEngineByName("JavaScript");
        String value = inputText.getText().toString();
        Toast.makeText(this,value,Toast.LENGTH_LONG).show();
        try{
            result = (double)engine.eval(value);
            Toast.makeText(this,String.format("%f",result),Toast.LENGTH_SHORT).show();
        }catch(Exception e){
            Toast.makeText(this,"Exception Raised",Toast.LENGTH_SHORT).show();
        }

    }

Что в этом не так? Приложение закрывается при выполнении этого действия. Он не показывает никаких ошибок, но приложение закрывается


person rrkjonnapalli    schedule 09.02.2017    source источник


Ответы (5)


сначала добавьте это: скомпилируйте «io.apisense:rhino-android:1.0» в файл градиента вашего приложения. Затем введите этот фрагмент кода

    TextView resultTextView = findViewById(R.id.result_text_view);
    String currentText = resultTextView.getText().toString();
    boolean valid = checkForValidity();
    double result=0;
    if(valid){
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
        try{
            result = (double)engine.eval(currentText);
        }catch(Exception e){
            Toast.makeText(this,"Exception Raised",Toast.LENGTH_SHORT).show();
        }
        currentText = currentText +"\n"+ "="+(result);
    }
    resultTextView.setText(currentText);
person Halil RAŞO    schedule 08.01.2018

Самый простой способ – использовать вместо этого Mozilla Rhino в Android[1] потому что ScriptEngine и его зависимости потребуют много времени на установку и головную боль.

Импортируйте фф:

import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import android.util.Log;

Код, который вы поместили где-то в своем методе:

    Context context = Context.enter(); // 
    context.setOptimizationLevel(-1); // this is required[2]
    Scriptable scope = context.initStandardObjects();
    Object result = context.evaluateString(scope, "18 > 17 and 18 < 100", "<cmd>", 1, null);
    Log.d("your-tag-here", "" + result);

Добавьте его в свои зависимости Gradle.

implementation group: 'org.mozilla', name: 'rhino', version: '1.7.10'

Ссылка:

  1. Mozilla Rhino
  2. Объяснение, зачем нужна эта строка кода
  3. репозиторий Mozilla Rhino Maven
person Miko Chu    schedule 30.10.2018
comment
Можно также добавить --› import android.util.Log; среди импорта. - person Bay; 06.09.2019
comment
Хорошо, добавил импорт. - person Miko Chu; 06.09.2019

Пакет javax.script недоступен на Android.

Если вы хотите использовать движок Javascript, вы должны реализовать это поведение самостоятельно или использовать одну из уже существующих зависимостей, например носорог-андроид.

person rsommerard    schedule 20.04.2017

javax.script недоступен в Android, поэтому вам нужно использовать стороннюю библиотеку

Я использую «rhino-android», и это служит цели

https://github.com/APISENSE/rhino-android

реализация в файле gradle

implementation 'io.apisense:rhino-android:1.0'

Java-код

javax.script.ScriptEngine engine = new javax.script.ScriptException().getEngineByName("rhino");
Object result = engine.eval("2+2");
person Rahul    schedule 25.05.2018

Это реальный пример использования Rhino Script Engine в Android в Android

Используйте этот импорт:

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;

и это пример:

           String Operation = "5+4-2";
           ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");

            try {
               Object result = engine.eval(Operation);
                Log.d("Calculator", "Operation: " + Operation + " result: " + result);
            } catch (ScriptException e) {
                Log.d("Calculator", " ScriptEngine error: " + e.getMessage());
            }

Выход:

Operation: 5+4-2 result: 7.0
person Jorgesys    schedule 31.10.2019