Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中使用ScriptEngineManager?_Android_Javax.script - Fatal编程技术网

如何在Android中使用ScriptEngineManager?

如何在Android中使用ScriptEngineManager?,android,javax.script,Android,Javax.script,有什么问题吗?执行此操作时,应用程序正在退出。 它没有显示任何错误,但应用程序正在关闭javax.script软件包在Android上不可用 如果要使用Javascript引擎,必须自己实现这些行为,或者使用已经存在的依赖项之一,如。首先添加以下内容: 编译'io.apisense:rhinoandroid:1.0' 到你的应用程序gradle文件。 然后键入此代码段 import android.widget.Toast; import javax.script.ScriptEngine; i

有什么问题吗?执行此操作时,应用程序正在退出。
它没有显示任何错误,但应用程序正在关闭javax.script软件包在Android上不可用

如果要使用Javascript引擎,必须自己实现这些行为,或者使用已经存在的依赖项之一,如。

首先添加以下内容: 编译'io.apisense:rhinoandroid:1.0' 到你的应用程序gradle文件。 然后键入此代码段

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

    }

javax.script在android中不可用,这就是为什么您必须使用第三方库

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

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);
java代码

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

最简单的方法是在Android中使用Mozilla Rhino,因为ScriptEngine及其依赖项需要耗时的安装和令人头痛的问题

导入ff:

javax.script.ScriptEngine engine = new javax.script.ScriptException().getEngineByName("rhino");
Object result = engine.eval("2+2");
在方法中放置的代码:

import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import android.util.Log;
参考:


  • 这是在中使用的一个真实示例

    使用此选项可以导入:

    implementation group: 'org.mozilla', name: 'rhino', version: '1.7.10'
    
    这是一个例子:

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

    还可以添加-->导入android.util.Log;在导入中。好的,添加了导入。
               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