前提需求
产品要求h5人员写企业酒店下单页面 这个页面有一个模块时申请单位 因为这个东西原生之前写过 所以可以直接调用 就有了h5和原生的交互。
原主人博客
链接: [https://github.com/yangchong211/YCWebView]
解决方法
因为公司已有注册js的方法 所以这里就先粘出来 这里主打的时相互传参数 之前的步骤可以看原主人链接
private X5WebView webView;
// 注册JS方法 js调用java
@JavascriptInterface
public void initWebViewBridge() {
webView.setDefaultHandler(new DefaultHandler());
//标题--js调java
}
首先 我们在记录方法名这个类中 写两端商量好统一的方法名
//下单页面调用申请单位
public static final String GO_SELECT_COMPANY="goSelectCompany";
//申请单位传数据给h5
public static final String GET_APPROAL_DATA="getApproalData";
然后在webView.registerHandler这个方法中 先传参数 然后 就可以在这个方法中进行逻辑处理
因为要求第一次点击不传参 选择好单位后 再次点击会跳到对应的单位中 所以h5得到值后 再次点击 会再传给原生 所以我们这里的值已经在data了 现在就要写实体类 接受这个值 跳转界面的时候赋值就好了
webView.registerHandler(WebJsConstants.GO_SELECT_COMPANY,(data,function)->{
ApplyEntity applyEntity = new Gson().fromJson(data, ApplyEntity.class);
ARouter.getInstance().build(PathLogistics.LogisticsOperatorChooseActivity)
.withString("companyId",applyEntity.getParam().getApplyCompanyNo())
.withString("companyName",applyEntity.getParam().getApplyCompanyName())
.withString("departmentNo",applyEntity.getParam().getApplyDepartmentNo())
.withString("departmentName",applyEntity.getParam().getApplyDepartmentName())
.withString("userNo", applyEntity.getParam().getManagerId())
.withString("userName",applyEntity.getParam().getManagerName())
.navigation(ActivityUtils.getTopActivity(), 3);
});
注意的一点时 上面跳转最后给requestCode传了个值 所以 就要在 ActivityResult中接受值 我们再把值传给h5
public void ActivityResult(int requestCode, int resultCode, Intent intent) {
if(requestCode==3){
if (intent != null) { //判断数据是否为空,就可以解决这个问题
userName = intent.getStringExtra("userName");
userNo = intent.getStringExtra("userNo");
departmentNo = intent.getStringExtra("departmentNo");
departmentName = intent.getStringExtra("departmentName");
companyName = intent.getStringExtra("companyName");
companyId = intent.getStringExtra("companyId");
Map<String, Object> map = new HashMap<>();
map.put("managerName", userName);
map.put("managerId", userNo);
map.put("applyDepartmentName", departmentName);
map.put("applyDepartmentNo", departmentNo);
map.put("applyCompanyName", companyName);
map.put("applyCompanyNo", companyId);
webView.callHandler(WebJsConstants.GET_APPROAL_DATA, new Gson().toJson(map), data -> {
});
}
}
WebViewX5Helper.getInstance().ActivityResult(getActivity(), webView, requestCode, resultCode, intent, viewModel, this);
}
这里又处理data为空的时候 否则跳转到原生的界面 不选择值 点击返回 就会出现空指针 闪退的情况
大体就这些 我这写的简单主要是因为公司框架搭的好 嘿嘿