如何使用Rhino

时间:2016-04-07 07:33:24

标签: javascript java android android-library rhino

我正在使用Rhino库在android中执行JavaScript函数。我有一个像javascript函数,

var exucuteJS = function(controlValues) {
var valueSelected = controlValues['country'];
valueSelected = valueSelected.toUpperCase();
 switch (valueSelected) {
    case "INDIA":
        return "IND_HOME";
    case "NEPAL":
        return "NEP_HOME";
    default:
        return "DEF_HOME"
 }
}

我将Java HashMap对象作为参数传递,比如将controlValues传递给函数executeJS。问题是,Rhino cant javascript代码,从密钥中获取值。

var valueSelected = controlValues['country'];

返回值未定义。

它适用于此行,

var valueSelected = controlValues.get('country');

但它不是有效的JavaScript代码。

同样的javascript将在android和iOS中执行。 iOS中不支持上述行。请建议。我使用的是最新版本的Rhino。

3 个答案:

答案 0 :(得分:2)

最后我自己找到了答案。

不是将HashMap发送到javascript函数,而是需要将其作为JSONObject发送。不像普通的JSONObject对象,而是作为NativeJSON对象形式的Object。

Object nativeJsonObject= NativeJSON.parse(rhino,scope,controlValueJsonString,new NullCallable());

其中, rhino - Rhino的Context对象。 范围 - 可编写脚本的对象 controlValueJsonString - 等效于HashMap的JSON字符串。 (controlValueJsonString = new Gson()。toJson(hashMap);)

NullCallable是一个由Callable实现的类(来自rhino的包 org.mozilla.javascript.Callable)

这个' nativeJsonObject'应该传递给javascript函数。

Object[] params = new Object[] { controlValues };

来自JSON对象,javascript可以获取值,

var valueSelected = controlValues['country'];

这对我有用。真的我不知道为什么下来投票给这个问题。 管理员,请注意这个问题。

答案 1 :(得分:0)

访问复杂对象数据的唯一方法是使用其界面。您需要为Android和ios创建单独的解决方案。

typeof运算符应该可以帮助您在这些情况之间切换。

答案 2 :(得分:0)

您不必实现NullCallable类的简单解决方案是

"table.file.replication": "2",
"table.compaction.minor.logs.threshold": "10",
"table.durability": "flush",
"table.file.max": "30",
"table.compaction.major.ratio": "9",
"table.split.threshold": "1G"

while the tablet server configuration is:
"tserver.wal.blocksize": "2G",
"tserver.walog.max.size": "8G",
"tserver.memory.maps.max": "32G",
"tserver.compaction.minor.concurrent.max": "50",
"tserver.compaction.major.concurrent.max": "8",
"tserver.total.mutation.queue.max": "50M",
"tserver.wal.replication": "2",
"tserver.compaction.major.thread.files.open.max": "15"

the tablet server heap has been set to 32GB

我在Rhino: return JSON from within Java

找到了