【问题标题】:executing javascript code inside Android "java" application在 Android“java”应用程序中执行 javascript 代码
【发布时间】:2012-04-11 20:42:35
【问题描述】:

我正在开发一个 Android 应用程序“本机用 java 编写” 我从服务器收到响应,响应是一个 javascript 函数

我需要使用这个函数在我的本地 java 代码中做一些计算。

任何想法如何做到这一点。

示例响应:

function logic_1(surveyString, responseValuesString) { 
    var survey = eval(surveyString);
    var responseValues = eval(responseValuesString);
    var target = new Object();
if (isChosen(128133225, responseValues)) { 
target.id = 2;
}
if (! target.id) { 
    target.id = 2;
 } 
    return target;
 } 

【问题讨论】:

  • 也许响应可能是函数的结果,或者指示要运行的 java 函数的代码?
  • 你得到什么回应
  • 响应是一个javascript函数
  • 我想在我的java代码中使用这个JS代码
  • 真的建议更改服务器的响应方式,以防您可以访问它。将特定于编程的数据返回给客户端是一个坏习惯。

标签: java javascript android javascript-engine


【解决方案1】:

也许你只需要像这样使用JavaScript auto executing function

(function(x, y){
  var result;
  result = x + y; // do some calculations
  return result;
})(1 , 2); //  you can set your parameters from Java

1, 2只是Java的两个参数

【讨论】:

    【解决方案2】:

    我之前曾成功使用 Rhino 在 Android 上执行 JavaScript 代码: http://www.mozilla.org/rhino/

    【讨论】:

    • 我作为一个接受 2 个输入参数的函数得到响应。我可以从我的 java 代码中输入这个函数吗?我的意思是“function logic_1(surveyString,responseValuesString)”以任何方式从Java设置这两个参数??
    • 是的,这不是 Rhino API 的问题。这个答案描述了如何做到这一点:stackoverflow.com/a/3996115/511012
    • 完美运行!谢谢,好吧,只是另一个问题...您可以看到该函数正在返回一个对象 var target = new Object();我能够在返回中捕获一个整数、布尔值、字符串,但是如何捕获一个对象?
    • 我已经发布了一个示例作为单独的答案,所以我可以包含代码。
    【解决方案3】:

    下面是一个如何从复杂类型返回值的示例:

    String strFunction = 
            "function add(x,y){ " +
                "return { " +
                    "id:x+y " +
                "}; " +
            "}";
    
    Context context = Context.enter();
    ScriptableObject scope = context.initStandardObjects();
    context.evaluateString(scope, strFunction, "test", 1, null);
    
    Function functionAdd = (Function)scope.get("add");
    NativeObject untypedResult = (NativeObject)functionAdd.call(context, scope, scope, new Object[] { 1, 2 });
    double id = (Double)untypedResult.get("id", untypedResult);
    

    重要的部分是最后两行,我们在其中调用 JavaScript 函数,将结果视为 NativeObject,然后从该对象中检索 'id' 属性的值。

    【讨论】:

    • @VivekKumarSrivastava 你不明白什么?
    • @VivekKumarSrivastava 不具体,它适用于使用 Mozilla Rhino 库的 Java:mozilla.org/rhino。不过它可以在 Android 上运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 2021-02-27
    • 2017-04-07
    • 1970-01-01
    • 2019-07-22
    相关资源
    最近更新 更多