Android使用webview调用js方法传参,参数无法传入的问题

最近做一款gis地图项目,需要用到Android中的webview加载本地html并且调用js方法:坑爹的问题出现了,当调用js方法需要传参数的时候死活传不进去

首先设置webview支持调用js方法:

WebSettings webSettings = mWebview.getSettings();                      //mWebview是你的webview控件
webSettings.setJavaScriptEnabled(true);                                //设置webview支持调用js方法

//设置js可以调用android中JsCallAndroid的方法,我设置这个是为了看一下js方法的回调情况,后面有JsCallAndroid类对应的代码,和js中调用的方法
mWebview.addJavascriptInterface(new JsCallAndroid(), "jsCallAndroid"); //后面html调用android的时候要用
mWebview.loadUrl("file:///android_asset/demo.html");                   //android_asset这个目录是加载的你assets目录

先说一下解决方案:

注意我推荐一定要这样写:因为如果你不在这里面写可能你在之前加载的html还没有完成,这样调用js方法是不会生效的

1、当你需要传入的字符串为"1234556789"这样全部为数字的字符串时,这样写一点问题没有:

 mWebview.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                String data = "123456789";
                mWebview.loadUrl("javascript:setData(" + data + ")");
                super.onPageFinished(view, url);
            }
        });

但是一般情况下不会是这样的

2、多数情况下js需要我们传入的是一个json类型的字符串,这时需要在你的变量两边加上一对单引号,否则是传不过去的,憋了我2天啊。

 mWebview.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);

        //参数一
        String data = "{"code": "12","id": "4","name": "浮标3","position": {"cartographicDegrees": [117.158944444, 39.16886111, 0.0]}"; 
        //参数二
        String res = "maxwindSpeed";

        //单个参数传递
        mWebview.loadUrl("javascript:setData('" + data + "')");  //仔细看我给标红的单引号

        //多个参数传递,现在是两个的,只需要把你需要传入的参数外面套上一个单引号,自己找精华吧
       mWebview.loadUrl("javascript:setData('" + data  + "','" + res  +"')");
    }
});

3、js调用Android

js调用android对应的内部类

private class JsCallAndroid{
    @JavascriptInterface
    public void jsCallbackMethod(String result) {
        LogUtils.d("js接收到的字符串为:" + result);  //当js中的方法被调用的时候打印接收到的字符串
    }
}

对应的html中被调用的js方法

function setData(str,icon){
window.jsCallAndroid.jsCallbackMethod(str);        //调用这个方法就会回调上面的方法,打印接收到的字符串
var res = JSON.parse(str);
         ...
         ...
}

/**
 *                             _ooOoo_
 *                            o8888888o
 *                            88" . "88
 *                            (| -_- |)
 *                            O\  =  /O
 *                         ____/`---'\____
 *                       .'  \\|     |//  `.
 *                      /  \\|||  :  |||//  \
 *                     /  _||||| -:- |||||-  \
 *                     |   | \\\  -  /// |   |
 *                     | \_|  ''\---/''  |   |
 *                     \  .-\__  `-`  ___/-. /
 *                   ___`. .'  /--.--\  `. . __
 *                ."" '<  `.___\_<|>_/___.'  >'"".
 *               | | :  `- \`.;`\ _ /`;.`/ - ` : | |
 *               \  \ `-.   \_ __\ /__ _/   .-` /  /
 *          ======`-.____`-.___\_____/___.-`____.-'======
 *                             `=---='
 *          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 *                     佛祖保佑        永无BUG
 *            佛曰:
 *                   写字楼里写字间,写字间里程序员;
 *                   程序人员写程序,又拿程序换酒钱。
 *                   酒醒只在网上坐,酒醉还来网下眠;
 *                   酒醉酒醒日复日,网上网下年复年。
 *                   但愿老死电脑间,不愿鞠躬老板前;
 *                   奔驰宝马贵者趣,公交自行程序员。
 *                   别人笑我忒疯癫,我笑自己命太贱;
 *                   不见满街漂亮妹,哪个归得程序员?
*/

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值