Android中WebView跟JavaScript之间传递json格式数据

Android中WebView和JavaScript之间传递json格式数据

Android中WebView和JavaScript进行简单通信的基础上,实现了传递json格式数据功能,效果类似这样:

Android中WebView跟JavaScript之间传递json格式数据

点击发起请求,得到Activity返回数据

Android中WebView跟JavaScript之间传递json格式数据

只对MainActivity和demo.html代码进行了修改。首先声明了json格式字符串:

String  jsonText = "{\"name\":\"vsp\",\"password\":\"vsp\"}";

DemoJavaScriptInterface类中,增加了方法clickOnAndroid,用来调用JavaScript中的方法,向Html页面传递数据:

final class DemoJavaScriptInterface {

     DemoJavaScriptInterface() {
     }

     /**
      * This is not called on the UI thread. Post a runnable to invoke
      * loadUrl on the UI thread.
      */
     public void clickOnAndroid() {
         mHandler.post(new Runnable() {
             public void run() {
                 mWebView.loadUrl("javascript:wave("+jsonText+")");
             }
         });

     }
}

WebView中设置了WebChromeClient,这样就能在控制台打印JavaScript中alert等信息,用来调试JavaScript

mWebView.setWebChromeClient(new MyWebChromeClient()); 

MyWebChromeClient代码如下:

final class MyWebChromeClient extends WebChromeClient { 
      @Override 
      public boolean onJsAlert(WebView view, String url, String message, JsResult result) { 
          Log.d(LOG_TAG, message); 
          result.confirm(); 
          return true; 
      } 
  } 

demo.html代码也很简单,就不做解释了。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
    <script language="javascript">
        /* This function is invoked by the activity */
        function wave(jsonText) {
            document.getElementById("output").innerHTML="用户姓名:"+jsonText.name;
            alert("2");
        }
    </script>
</head>

    <body>这是一个html页面 <br /><br /><br />
    <div id="output" >用户姓名:</div><br /><br />
        <input type="submit" value="发起请求" onclick="window.demo.clickOnAndroid();"/>
    </body>
</html>

源码链接见:http://bigcateasymorse.googlecode.com/svn/trunk/webviewdemo1.1/

 

来自:http://bigcat.easymorse.com/?p=746