android端和webview的交互

第一次写,写的不好,大家谅解。

因为公司需要,所以在webview的这条充满巨大坑的路上走了一些路。

好了,说正文吧。

-----------------------------------------------------分割线------------------------------------------------------------------

根据需求,app要和H5进行相互的取值和传值。

基本的取值很简单。

首先创建一个webview

<WebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
然后在activity里设置一些基本属性

private WebView webview;
webview= (WebView) findViewById(R.id.webview);
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setAppCacheMaxSize(1024 * 1024 * 1);
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
webSettings.setAppCachePath(appCachePath);
webSettings.setAllowFileAccess(true);
webSettings.setAppCacheEnabled(true);
这些属性  允许JS运行之类的。

重点来啦!

是否能和H5做上交互的重点。

webview.addJavascriptInterface(this, "android");
至于这个属性,我就不多做解释啦,要懂的小伙伴,自己百度吧。

对于这个里面的值 android,是和H5里相辉相映的。

H5里需要写上方法    window.android.shareXW(data);

这里就是只获取window下android里的shareXW方法。

基本设置完成了。接下来就是如何取值了。

@JavascriptInterface
public void shareWX(String activityname) {

}
写上对应的方法,就可以取到值了。

H5里按钮需要在监听里放上window.android.shareXW("传的值");

这样,在点击某个按钮的时候,这个方法就会被触发,得到值。


至于android给H5传值,也很简单。

先在H5里写一段JS


function javaCallJs(arg){

document.getElementById("content").innerHTML =

("欢迎:"+arg );

}

然后用webview调用JS方法并传值

webView.loadUrl("javascript:javaCallJs("+"'"+name+"'"+")");

这样H5就能接收到你传过去的值了。

和H5进行交互并不难,难的是我们该如何规范它,如何让我们复杂的交互更简单,新增的需求更快处理,这才是我们应该注重的地方。


          当我想到规范的时候,第一反应就是定义实体类,根据需求的不同,定义不同的实体类
来接收和返回。虽然这种想法并没有太大的错误,但是并不完善,只怪自己经验太浅,道行不够深啊!


           举个栗子吧!移动端请求后台获取了一个数组,打开H5后,需要从数组中遍历获取到该参数的id,但是H5端只有数组的某个参数。为了节省流量,少次请求,目前我认为的最好方法就是从移动端获取该参数的id,理所当然的,利用交互把参数从H5取出来,在客户端进行遍历再把得到的id传给H5端,但是要考虑一些特殊情况,比如数组中并没有H5传过来的参数时,我们应该怎么做?万一回传时JS不一样的我们又应该怎么做?同时请求的时候,我们回传的参数H5该如何判断哪个参数对应哪次请求呢?等等一些情况需要考虑......


根据那些特殊情况,我们可以定义一些固定参数来解决这些问题。


ApiName:String类型,根据函数名来判断是做哪一种操作。


Callback:String类型,如果需要回传就写上回调函数名,不需要则传null

id:String类型,辨认是哪次请求,id每次都不相同

status:String类型,回传时如果信息核对正确传true,不正确传false。

data:List<bean>,具体业务需要的参数写在这里。

目前我只能想到这么多,如果有补充,请提出。



例子:


H5向移动端传递个人信息,并保存在本地。
数据例子:

”ApiName”:”information”,
”Callback”:”FromWorkJS”,
“id”:”informationjs”, 
“status”:”true”, 
“data”:”{ 
“name”:”xiaoming”, 
“gender”:”boy”, 
“age”:”21” 
}” 
}



数据正常时返回的json数据包示例:

”ApiName”:”information”, 
”Callback”:”FromWorkJS”,
“id”:”informationjs”, 
“status”:”true”, 
“data”:”{ }” 
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值