最近做一款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
 *            佛曰:
 *                   写字楼里写字间,写字间里程序员;
 *                   程序人员写程序,又拿程序换酒钱。
 *                   酒醒只在网上坐,酒醉还来网下眠;
 *                   酒醉酒醒日复日,网上网下年复年。
 *                   但愿老死电脑间,不愿鞠躬老板前;
 *                   奔驰宝马贵者趣,公交自行程序员。
 *                   别人笑我忒疯癫,我笑自己命太贱;
 *                   不见满街漂亮妹,哪个归得程序员?
*/

更多相关文章

  1. Android开发者网站打不开的解决方法
  2. android sdk manager 无法更新解决方法
  3. Android中bindService基本使用方法概述
  4. 浅析Android中ndk-build支持的参数
  5. Unity 编辑器环境下不能正确加载Android Assetbundle 中的 Shade
  6. Android常用控件的使用方法

随机推荐

  1. 《深入理解Android(安卓)卷1》读书笔记 (
  2. 第一章 Android体系与系统架构
  3. android:EditText属性/去边框
  4. 如何通过迅雷加速下载Android SDK
  5. android activity 实现半透明Translucent
  6. Android(安卓)内容提供器---创建内容提供
  7. Android WIndow,WindowManager简单介绍
  8. android点击事件的分发过程
  9. 安卓日记——超简单的开发框架afinal
  10. Android手机时间自动同步