public class MainActivity
extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView text1 = (TextView) findViewById(android.R.id.text1);
TextView text2 = (TextView) findViewById(android.R.id.text2);
text1.setText(runScript(JAVA_CALL_JS_FUNCTION, "Test",
new String[] {}));
text2.setText(runScript(JS_CALL_JAVA_FUNCTION, "Test",
new String[] {}));
}
/** Java执行js的方法 */ private static final String JAVA_CALL_JS_FUNCTION = "function Test(){ return '农民伯伯 java call js Rhino'; }";
/** js调用Java中的方法 */ private static final String JS_CALL_JAVA_FUNCTION =
// "var ScriptAPI = java.lang.Class.forName(\"" + MainActivity.
class.getName() + "\", true, javaLoader);" +
// "var methodRead = ScriptAPI.getMethod(\"jsCallJava\", [java.lang.String]);" +
// "function jsCallJava(url) {return methodRead.invoke(null, url);}" +
// "function Test(){ return jsCallJava(); }";
/** * 执行JS * * @param js js代码 * @param functionName js方法名称 * @param functionParams js方法参数 * @return */ public String runScript(String js, String functionName, Object[] functionParams) {
Context rhino = Context.enter();
rhino.setOptimizationLevel(-1);
try {
Scriptable scope = rhino.initStandardObjects();
ScriptableObject.putProperty(scope, "javaContext", Context.javaToJS(MainActivity.
this, scope));
ScriptableObject.putProperty(scope, "javaLoader", Context.javaToJS(MainActivity.
class.getClassLoader(), scope));
rhino.evaluateString(scope, js, "MainActivity", 1,
null);
Function function = (Function) scope.get(functionName, scope);
Object result = function.call(rhino, scope, scope, functionParams);
if (result
instanceof String) {
return (String) result;
}
else if (result
instanceof NativeJavaObject) {
return (String) ((NativeJavaObject) result).getDefaultValue(String.
class);
}
else if (result
instanceof NativeObject) {
return (String) ((NativeObject) result).getDefaultValue(String.
class);
}
return result.toString();
// (String) function.call(rhino, scope, scope, functionParams); }
finally {
Context.exit();
}
}
public static String jsCallJava(String url) {
return "农民伯伯 js call Java Rhino";
}
}