在Android内部执行javascript代码;爪哇语;应用
我正在开发一款Android应用程序“本机java编写”在Android内部执行javascript代码;爪哇语;应用,java,javascript,android,javascript-engine,Java,Javascript,Android,Javascript Engine,我正在开发一款Android应用程序“本机java编写” 我从服务器得到一个响应,响应是一个javascript函数 我需要使用这个函数在我的本地java代码中进行一些计算 有什么办法吗 样本响应: function logic_1(surveyString, responseValuesString) { var survey = eval(surveyString); var responseValues = eval(responseValuesString);
我从服务器得到一个响应,响应是一个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;
}
也许您只需要使用如下的
JavaScript自动执行函数
:
(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中的两个参数也许您只需要使用JavaScript自动执行函数
,如下所示:
(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中的两个参数我以前成功地使用Rhino在Android上执行JavaScript代码:
我以前曾成功使用Rhino在Android上执行JavaScript代码:
下面是一个如何从复杂类型返回值的示例:
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”属性的值。下面是一个如何从复杂类型返回值的示例:
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”属性的值。可能响应是函数的结果,或者一个指示要运行的java函数的代码?您得到了什么响应?响应是一个javascript函数。我想在java代码中使用此JS代码。如果您有权访问该代码,建议更改服务器的响应方式。将特定于编程的数据返回给客户端是一个坏习惯。也许响应可能是函数的结果,或者一个指示要运行的java函数的代码?您得到了什么响应?响应是一个javascript函数。我想在java代码中使用此JS代码。如果您有权访问该代码,建议更改服务器的响应方式。将特定于编程的数据返回到客户端是一个坏习惯。我得到的响应是一个包含2个输入参数的函数。。我可以从java代码中输入这个函数吗?我的意思是“function logic_1(surveyString,responseValuesString)”任何从Java设置这两个参数的方法??是的,Rhino API没有问题。这个答案描述了如何做到这一点:工作完美!谢谢,好的,还有一个问题。。。您可以看到该函数正在返回一个对象var target=new object();我能够在返回中捕获整数、布尔值和字符串,但是如何捕获对象呢?我已经发布了一个示例作为单独的答案,因此我可以包含代码。我得到的响应是一个包含两个输入参数的函数。。我可以从java代码中输入这个函数吗?我的意思是“function logic_1(surveyString,responseValuesString)”任何从Java设置这两个参数的方法??是的,Rhino API没有问题。这个答案描述了如何做到这一点:工作完美!谢谢,好的,还有一个问题。。。您可以看到该函数正在返回一个对象var target=new object();我能够在返回中捕获整数、布尔值和字符串,但如何捕获对象?我已经发布了一个示例作为单独的答案,因此我可以包含代码。@VivekKumarSrivastava您不明白什么?@VivekKumarSrivastava不明确,它是用于使用Mozilla Rhino库的Java的:。不过它可以在Android上运行。@VivekKumarSrivastava你还不明白什么?@VivekKumarSrivastava不明确,它是用于使用Mozilla Rhino库的Java的:。不过,它可以在Android上运行。