java - Android call javascript function with parameters without webview -
i call javascript function parameters java in android app, don't need load in webview need call , results js file in assets folder.
i did on ios using javascriptcore, can't find same functionality in android.
looked androidjscore , rihno docs , tutorials not clear on subject.
i load js file string , further can't go how send parameters , results.
here how load file string :
assetmanager assetmanager = getassets(); string jsfile; // load js file inputstream input; try { input = assetmanager.open("authenticate.js"); int size = input.available(); byte[] buffer = new byte[size]; input.read(buffer); input.close(); // byte buffer string jsfile = new string(buffer); resulttv.settext(jsfile); log.d("tag", jsfile); } catch (ioexception e) { e.printstacktrace(); }
the parameters send come edittexts.
the javascript function take 2 parameters , return json
function authenticate(uname, pword) { var authenstring = json.stringify(authenjson); return authenstring; }
any appreciated.
here's how use rhino in android:
/** * * @param javascriptcode * @param functionnameinjavascriptcode * @param params not pass array of primitives! example if passing doubles, pass double[], not double[] * @return */ public map<string,object> execute(string javascriptcode, string functionnameinjavascriptcode, iterable<string> returnobjectkeys, object... params){ map<string,object> rtn = null; // every rhino vm begins enter() // context not android's context context rhino = context.enter(); // turn off optimization make rhino android compatible rhino.setoptimizationlevel(-1); try { final object[] parameters = new object[params.length + 1]; for(int i=0; < params.length; i++){ parameters[i] = params[i]; } parameters[parameters.length - 1] = buildconfig.debug; scriptable scope = rhino.initstandardobjects(); rhino.evaluatestring(scope, javascriptcode, "javascript", 1, null); // functionname defined in javascriptcode object obj = scope.get(functionnameinjavascriptcode, scope); if (obj instanceof function) { function jsfunction = (function) obj; // call function params object jsresult = jsfunction.call(rhino, scope, scope, parameters); if(jsresult == null){ return null; } scriptable s = (scriptable) jsresult; rtn = convert(s, returnobjectkeys); } else { throw new illegalargumentexception("no function " + functionnameinjavascriptcode + " found in supplied script"); } } { context.exit(); } return rtn; } private map<string,object> convert(scriptable object, iterable<string> keys){ map<string,object> rtn = new hashmap<>(); for(string s : keys){ if(object.has(s,object)){ rtn.put(s, object.get(s, object)); } } return rtn; }
i think got of can't find question now.
Comments
Post a Comment