我需要能够在我的应用程序中处理诸如“(45+9)/8”之类的数学方程。我只想使用 JavaScript 评估它,但意识到我不能在 Android 中使用 javax.script。所以,我找到了 WebView,但我在使用它时遇到了一些麻烦。大多数示例是指使用带有 JS 代码的外部页面,或者使用“javascript: var return ...etc”。我需要使用后者,但是将变量返回到我的应用程序时遇到了一些麻烦。
是否可以让 JS 对其进行评估,然后将值写入隐藏的 TextView?
我需要能够在我的应用程序中处理诸如“(45+9)/8”之类的数学方程。我只想使用 JavaScript 评估它,但意识到我不能在 Android 中使用 javax.script。所以,我找到了 WebView,但我在使用它时遇到了一些麻烦。大多数示例是指使用带有 JS 代码的外部页面,或者使用“javascript: var return ...etc”。我需要使用后者,但是将变量返回到我的应用程序时遇到了一些麻烦。
是否可以让 JS 对其进行评估,然后将值写入隐藏的 TextView?
查看exp4j。它是一个简单的 java 表达式求值器。对于您在问题中发布的方程式,您可以这样做:
Calculable calc = new ExpressionBuilder("(45+9)/8").build()
double result1=calc.calculate();
试试这个:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.swing.JOptionPane;
private void btnEqualsActionPerformed(java.awt.event.ActionEvent evt) {
String expression = txtResult.getText();
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
try {
result = engine.eval(expression).toString();
txtResult.setText(result);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, txtResult.getText() + " cannot be calculated. Try again!", "Error on calculation!", JOptionPane.WARNING_MESSAGE);
txtResult.setText("");
}
}
更高级表达的有趣选项可能是将一些在线计算器变成可以在手机上使用的网络服务。
您可以在 android studio 中使用exp4j执行此操作。
从官方网站下载 exp4j 二进制 jar。下载
通过复制文件夹中的 jar 文件将 exp4j 导入 android studio app/libs
。
build.gradle
在模块文件依赖项中添加以下行。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
...
}
现在您可以尝试以下演示,
package com.example.expressionevaluator;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import de.congrace.exp4j.Calculable;
import de.congrace.exp4j.ExpressionBuilder;
import de.congrace.exp4j.UnknownFunctionException;
import de.congrace.exp4j.UnparsableExpressionException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Calculable calc = null;
try {
calc = new ExpressionBuilder("(200 + 100) / 2 + 300").build();
double result = calc.calculate();
Log.d("result", result);
} catch (UnknownFunctionException e) {
e.printStackTrace();
} catch (UnparsableExpressionException e) {
e.printStackTrace();
}
}
}
更多: