【问题标题】:How to get values from a Java HashMap in javascript function using Rhino如何使用 Rhino 从 JavaScript 函数中的 Java HashMap 获取值
【发布时间】:2016-04-07 07:33:23
【问题描述】:

我正在使用 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 无法使用 JavaScript 代码从键中获取值。

var valueSelected = controlValues['country'];

返回值未定义。

这条线很好用,

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

但它不是有效的 javascript 代码。

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

【问题讨论】:

  • 我不明白为什么投反对票。不同的人要求会有所不同。不理解相同的投票是非常恶心的

标签: javascript java android android-library rhino


【解决方案1】:

终于我自己找到了答案。

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

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

在哪里, rhino - Rhino 的 Context 对象。 scope - Scriptable 的对象 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'];

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

【讨论】:

  • 这实际上并没有回答您提出的问题。这回答了如何使用 Rhino 将 HashMap 转换为 Java 中的 NativeObject。您已经回答了问题中的问题。使用 Rhino 在 javascript 函数中访问 HashMap 的方法是 controlValues.get('country');
【解决方案2】:

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

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

【讨论】:

  • 我的要求是在Android中运行上面提到的javascript。 get() 方法纯粹是java。为什么它不执行 hashmap['key'] 方法从 hashmap 获取值
  • 因为地图不是js对象。这些值不保存在字段中。
  • 有什么办法可以做到这一点。我有一个java HashMap,需要发送到javascript funcion。
【解决方案3】:

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

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

我在Rhino: return JSON from within Java找到的

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多