前言
我们大家都知道WebVIEw交互中可以传递基本数据类型的数据值,比如常用的int,String.
但是WebVIEw也可以传递一种很重要很常用的数据格式-Json数据.
传递Json和传递String数据是一样的,关键就是HTML5端对Json数据通过eval()
函数进行解析
传递过程中androID端调用的最重要的一个函数就是:
addJavaScriptInterface(new MyObject(this,”dd”),”my”);
这个函数有两个参数,第一个参数传入的是含有实现了JavaScript中的方法,并且使用@JavaScriptInterface注解标识这个方法是被Js代码调用的,第二个参数是一个桥接字符串,这个桥接字符串可以随意定义,只要androID端和JavaScript端保持一致就可以.
下面附上传递Json数据的完整Demo
index.HTML
<!DOCTYPE HTML><HTML lang="en"><head> <Meta charset="UTF-8"> <Title>测试AndroID Json传值</Title> <script src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.Js"></script> <script src="http://cdn.hcharts.cn/highcharts/highcharts.Js"></script> <script type="text/JavaScript">$(function(){ //通过暴露的my对象来获取数据 var data = my.getData(); //将Json字符串转换为数组 var f = eval(data); //向表格填充数据 for(var i = 0;i<f.length;i++){ var en = f[i]; $("table").append("<tr><td>"+en.age+"</td><td>"+en.name+"</td><td>"+en.uint+"</td></tr>"); } }); </script></head><body>人员表<div> <table ID="table" border="1" bgcolor="#ffddff"></table></div></body></HTML>
MainActivity.java
package com.geocompass.testdeliverjson;import androID.support.v7.app.AppCompatActivity;import androID.os.Bundle;import androID.webkit.WebSettings;import androID.webkit.WebVIEw;public class MainActivity extends AppCompatActivity { @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); WebVIEw wv = (WebVIEw) findVIEwByID(R.ID.wv); WebSettings settings = wv.getSettings(); //调用WebVIEw关联的WebSettings中setJavaScriptEnable(true)方法。 settings.setJavaScriptEnabled(true); wv.loadUrl("file:///androID_asset/index.HTML"); //调用WebVIEw关联的WebSettings中addJavaScriptInterface wv.addJavaScriptInterface(new MyObject(this,"dd"),"my"); }}
activity_main.xml
<?xml version="1.0" enCoding="utf-8"?><relativeLayoutxmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:ID="@+ID/activity_main" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"tools:context="com.geocompass.testdeliverjson.MainActivity"> <WebVIEw androID:ID="@+ID/wv" androID:layout_wIDth="match_parent"androID:layout_height="match_parent"></WebVIEw></relativeLayout>
MyObject.java
package com.geocompass.testdeliverjson;import androID.content.Context;import androID.util.Log;import androID.webkit.JavaScriptInterface;import com.Google.gson.Gson;import java.util.ArrayList;import java.util.List;/** * Created by liuxu on 2017/2/13. */public class MyObject { public static final String TAG = MyObject.class.getSimplename() ; private Context mContext; private String data; public MyObject(Context c,String data){ this.data = data; mContext = c; } /** * 获取person字符串传HTML * @return */ @JavaScriptInterface public String getData(){ List<Person> mList = new ArrayList<>(); for (int i = 0; i <10 ; i++) { mList.add(new Person("姓名"+i,i+"","工作单位"+i)); } Gson gson = new Gson(); String d = gson.toJson(mList); Log.d(TAG,"getData: dddd"+d); return d; }}
Person.java
package com.geocompass.testdeliverjson;/** * Created by liuxu on 2017/2/13. */public class Person { public String name; public String age; public String uint; public Person(String name,String age,String uint) { this.name = name; this.age = age; this.uint = uint; }}
运行效果截图如下
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。
您可能感兴趣的文章:Android webview与js交换JSON对象数据示例Android中post请求传递json数据给服务端的实例 总结以上是内存溢出为你收集整理的Android WebView交互传递json字符串并解析的方法全部内容,希望文章能够帮你解决Android WebView交互传递json字符串并解析的方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)