4
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();
        }

    }

它有什么问题?执行此操作时应用程序正在退出。它没有显示任何错误,但应用程序正在关闭

4

5 回答 5

4

首先添加以下内容:将 'io.apisense:rhino-android:1.0' 编译到您的应用程序 gradle 文件中。然后输入此代码段

    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);
于 2018-01-08T08:45:03.643 回答
4

最简单的方法是在 Android 中使用 Mozilla Rhino [1],因为 ScriptEngine 及其依赖项需要耗时的设置和令人头疼的问题。

导入ff:

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 犀牛
  2. 解释为什么需要那行代码
  3. Mozilla Rhino 的 Maven 存储库
于 2018-10-30T07:01:29.603 回答
1

这是一个在Android中使用Rhino Script Engine的真实示例

使用这个进口:

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
于 2019-10-31T15:26:35.203 回答
1

javax.script软件包在 Android 上不可用。

如果您想使用 Javascript 引擎,您必须自己实现这些行为或使用已经存在的依赖项之一,例如rhino-android

于 2017-04-20T15:02:26.433 回答
1

javax.script 在 android 中不可用,这就是你必须使用第三方库的原因

我正在使用“rhino-android”,它可以达到目的

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

在 gradle 文件中实现

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

爪哇代码

javax.script.ScriptEngine engine = new javax.script.ScriptException().getEngineByName("rhino");
Object result = engine.eval("2+2");
于 2018-05-25T06:40:43.813 回答