随着混合开发模式比较流行,很多时候,我们需要在原生的基础上,使用WebView加载网页,这样控制更加方便。今天我们来看看,如何将Java对象和列表集合传值给JS调用。
<>强如何将Java对象实例传值给JS 强>
其实将我们在Android原生中将Java对象实例传值给JS承认并且可以使用的对象,方法非常简单。我们来举个例子。
html文件
我们在本地写了一个html文件,放在资产目录中。
& lt; !DOCTYPE html> & lt; html> & lt; head> & lt;元charset=皍tf - 8”比; & lt; title>测试& lt;/title> & lt; h2 id="名称"祝辞& lt;/h2> & lt; h2 id="年龄"祝辞& lt;/h2> & lt; h2 id=靶浴痹? lt;/h2> & lt; script>//Android需要调用的方法 函数callJS () { . getelementbyid(“时代”).innerHTML=person.getAge (); . getelementbyid(“名字”).innerHTML=person.getName (); . getelementbyid(“性”).innerHTML=person.getSex (); } & lt;/script> & lt;/head> & lt;/html> >之前看到callJS()函数中的人了吗?它就是我们传值进行的Java对象实例。直接就可以使用,获取了年龄,名字,和性别属性。那我们该如何声明该对象,才会被JS所承认呢?
<强> Java对象强>
来,看看,我们是如何创建人这个实体类的。代码如下:
包com.loonggg.wedswebview; 进口android.webkit.JavascriptInterface;/* * *由loonggg> webView.loadUrl(“文件:///android_asset/test_object.html”); 最后人p=new (); p.setName (“loonggg”); p.setAge (28); p.setSex(男); 西弗吉尼亚州。addJavascriptInterface (p,“人”); wv.loadUrl (“javascript: callJS () "); >之前西弗吉尼亚州。addJavascriptInterface (p,“人”);的意思就是注入Java对象p给webview为人,在JS调用的时候,对应的就是人。
wv.loadUrl (“JavaScript: callJS()),这句话的意思就是:调用JS中的方法callJS()函数方法。
<强> Java列表如何传给JS呢? 强>
其实按道理来说,是不可以将列表集合直接传值给JS使用,但是既然对象可以传值,JS可以调用java对象,也可以调用Android中的方法,那我们就一拆分的形式传过去。
Html文件
& lt; !DOCTYPE html> & lt; html> & lt; head> & lt;元charset=皍tf - 8”比; & lt; title>测试& lt;/title> & lt; h2 id="名称"祝辞& lt;/h2> & lt; h2 id="年龄"祝辞& lt;/h2> & lt; h2 id=靶浴痹? lt;/h2> & lt; h2>名单传值测试& lt;/h2> & lt; h2 id=" name1 "祝辞& lt;/h2> & lt; h2 id=" age1 "祝辞& lt;/h2> & lt; h2 id=" sex1 "祝辞& lt;/h2> & lt; script>//Android需要调用的方法 函数callJS () { . getelementbyid(“时代”).innerHTML=person.getAge (); . getelementbyid(“名字”).innerHTML=person.getName (); . getelementbyid(“性”).innerHTML=person.getSex (); } 函数callListJS () { . getelementbyid (“age1”) .innerHTML=window.javatojs.getPersonObject (0) .getAge (); . getelementbyid (“name1”) .innerHTML=window.javatojs.getPersonObject (0) . getname (); . getelementbyid (“sex1”) .innerHTML=window.javatojs.getPersonObject (0) .getSex () } & lt;/script> & lt;/head> & lt;/html> >之前<强>拆分传值强>
如何拆分呢?就是在JS中调用Android中的方法,里面可以按照索引返回集合中的对象,然后再获取对象中的属性。代码如下:
/* * *该方法将在js脚本中,通过window.javatojs .....()进行调用 * * @return */@JavascriptInterface 公众人物getPersonObject (int指数){ 返回list.get(指数); } @JavascriptInterface 公共int getSize () { 返回list.size (); } list.add (p); 西弗吉尼亚州。addJavascriptInterface(这一点,“javatojs”); wv.loadUrl (“javascript: callListJS () "); >之前整个Acitvity中所有的代码
公开课MainActivity延伸AppCompatActivity { 私人WebView wv; 私人List列表=new ArrayList (); @SuppressLint (“JavascriptInterface”) @Override 保护无效alt="详解WebView与JS交互传值问题"> 详解WebView与JS交互传值问题