如何使用Rhino从javascript函数中的Java HashMap获取值

如何使用Rhino从javascript函数中的Java HashMap获取值,javascript,java,android,android-library,rhino,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 "IN

我正在使用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对象作为参数传递给函数executeJS,比如controlValues。问题是,Rhino无法使用javascript代码从键获取值

var valueSelected = controlValues['country'];
返回值未定义

这条线很好用

var valueSelected = controlValues.get('country');
但它不是有效的javascript代码


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

访问复杂项目数据的唯一方法是使用其接口。您需要为Android和ios创建单独的解决方案


操作员的
类型应该可以帮助您在这些情况之间切换。

最终我自己找到了答案

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

Object nativeJsonObject= NativeJSON.parse(rhino,scope,controlValueJsonString,new NullCallable());
在哪里,, rhino-rhino的上下文对象。 作用域-可编写脚本的对象 controlValueJsonString—相当于HashMap的JSON字符串。(controlValueJsonString=new Gson().toJson(hashMap);)

NullCallable是从rhino的Callable(包)实现的类 org.mozilla.javascript.Callable)

此“nativeJsonObject”应传递给javascript函数

Object[] params = new Object[] { controlValues };
从JSON对象中,javascript可以获得如下值:

var valueSelected = controlValues['country'];
这对我有用。我真的不知道为什么对这个问题投了反对票。
管理员,请注意这个问题。

不必实现可空调用类的更简单解决方案是

new JsonParser(context, scope).parseValue("{\"this is\":\"JSON\"}");

我在

上发现,我不明白为什么会被否决。对于不同的人,要求会有所不同。我的要求是在Android中运行上述javascript。get()方法是纯java的。为什么不执行hashmap['key']方法从hashmap获取值,因为映射不是js对象。这些值未保存在字段中。是否有任何方法可以实现这一点。我有一个java HashMap,需要发送到javascript函数。这实际上并没有回答您提出的问题。这回答了如何使用Rhino将HashMap转换为Java中的NativeObject。你已经回答了你问题中的问题。使用Rhino在javascript函数中访问HashMap的方法是
controlValues.get('country')