我正在开发一个项目,我需要下载一个javascript并用它来计算一些值。这已经在iOS上工作,所以javascript似乎没问题。
这是精简的javascript(我删除了内容,因为我没有脚本):
var resultArray = [];
function calculateRemainingAmountForForecastWeeks(numberOfWeeks, weeklyDisposable, easing, safetyZone, safetyZoneEasing, overSpentThisWeek) {
// Some calculations...
resultArray[numberOfWeeks] = spentBeyondForecast;
}
我正在使用Rhino,这就是我的工作:
org.mozilla.javascript.Context rhino = org.mozilla.javascript.Context.enter();
rhino.setOptimizationLevel(-1);
try {
Scriptable scope = rhino.initStandardObjects();
rhino.evaluateString(scope, WeeklyApplication.getCalculatorJS(), "JavaScript", 0, null);
Object obj = scope.get("calculateRemainingAmountForForecastWeeks", scope);
if (obj instanceof Function) {
Function jsFunction = (Function) obj;
// Call the function with params
Object[] params = new Object[]{numberOfWeeks, weeklyDisposable, easing, safetyZone, safetyZoneEasing, overSpentThisWeek};
Object jsResult = jsFunction.call(rhino, scope, scope, params);
// Parse the jsResult object to a String
String result = org.mozilla.javascript.Context.toString(jsResult);
Log.d(TAG, "SKN-calculate3=" + result);
}
} finally {
org.mozilla.javascript.Context.exit();
}
我知道这不是最优化的范围使用,但我只需先让它工作。我一直在结果字符串中得到“未定义”,我在这里做错了什么?
当我确实正常工作时,如何获取存储在“resultArray”中的值?
谢谢你 索伦
答案 0 :(得分:0)
从您发布的代码看,函数calculateRemainingAmountForForecastWeeks()
似乎没有返回任何内容,因此可以从中获取Undefined
。
从resultArray
获取价值很简单,因为它只是scope
可编写脚本对象中的字段:
Object[] params = new Object[]{numberOfWeeks, weeklyDisposable, easing, safetyZone, safetyZoneEasing, overSpentThisWeek};
// function doesn't return anything
jsFunction.call(rhino, scope, scope, params);
NativeArray resultArray = (NativeArray) scope.get("resultArray", scope);
double result = ((Number) resultArray.get(numberOfWeeks)).getDoubleValue();
Log.d(TAG, "SKN-calculate3=" + result);
注意:当然,我不知道您的类型是什么,因此您可能需要更新此代码段以使其适合您。