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();
}
}
这其中有什么问题?执行此操作时,应用正在退出。它没有显示任何错误,但应用程序正在关闭
最简单的方法是在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'
参考:
- 摩斯拉犀牛
- 解释为什么需要这行代码
- Mozilla Rhino's Maven Repository
首先添加以下内容: 编译 '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);
javax.script
软件包在 Android 上不可用。
如果你想使用Javascript引擎,你必须自己实现这些行为,或者使用已经存在的依赖项之一,如rhino-android。
javax.script 在 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");
这是在 Android 中使用 Rhino 脚本引擎的真实示例
使用此导入:
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