借助yangchongWebview实现h5和原生的交互

前提需求

产品要求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为空的时候 否则跳转到原生的界面 不选择值 点击返回 就会出现空指针 闪退的情况

大体就这些 我这写的简单主要是因为公司框架搭的好 嘿嘿

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值