如何使用Rhino从javascript函数中的Java HashMap获取值
我正在使用Rhino库在android中执行JavaScript函数。我有一个javascript函数,比如如何使用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
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')代码>