Android WebView交互传递json字符串并解析的方法

前言

我们大家都知道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"?>
<RelativeLayout
xmlns: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;
 }
}

运行效果截图如下

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Android中post请求传递json数据给服务端的实例

    在最近的项目中有个需求是这样的: 入参封装成JSON,EXAMPLE: { "uuid": "iamauuid", "clientType": "AND", "content": "{\"gender\":\"F\",\"name\":\"TTT\"}"} 其中content中是json的object,且要求

  • Android webview与js交换JSON对象数据示例

    最近几个项目的测试结果,Android无法主动通过调用 webview.loadUrl("javascript:"+callbackFunction+"('"+data+"')"); 这种方式将jsonobject类型的data传给js,因为js那边得到就是一个string的对象. 与此同时,js主动调用android的对象方式,android也无法返回给js一个jsonobject,需要js做一下转换,例如: Android 代码: 复制代码

  • Android WebView交互传递json字符串并解析的方法

    前言 我们大家都知道WebView交互中可以传递基本数据类型的数据值,比如常用的int,String. 但是WebView也可以传递一种很重要很常用的数据格式-json数据. 传递json和传递String数据是一样的,关键就是HTML5端对json数据通过eval()函数进行解析 传递过程中android端调用的最重要的一个函数就是: addJavascriptInterface(new MyObject(this,"dd"),"my"); 这个函数有两个参数,第

  • Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法

    本文实例讲述了Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法.分享给大家供大家参考,具体如下: 第一步:根据指定的URL从google 服务器上获得包含地址的json格式的数据(其还提供xml格式的,但json解析效率比xml高) private static StringBuffer getJSONData(String urlPath){ try { URL url = new URL(urlPath); HttpURLConnection httpURLCon

  • Android WebView 不支持 H5 input type="file" 解决方法

    最近因为赶项目进度,因此将本来要用原生控件实现的界面,自己做了H5并嵌入webview中.发现点击H5中 input type="file" 标签 不能打开android资源管理器. 通过网络搜索发现是因为 android webview 由于考虑安全原因屏蔽了 input type="file" 这个功能 . 经过不懈的努力,以及google 翻译的帮助 在 stackoverflow 中找到了解决的方法. 具体可以理解为 重写webview 的WebChrome

  • Android WebView 上传文件支持全解析

    默认情况下情况下,使用Android的WebView是不能够支持上传文件的.而这个,也是在我们的前端工程师告知之后才了解的.因为Android的每个版本WebView的实现有差异,因此需要对不同版本去适配.花了一点时间,参考别人的代码,这个问题已经解决,这里把我踩过的坑分享出来. 主要思路是重写WebChromeClient,然后在WebViewActivity中接收选择到的文件Uri,传给页面去上传就可以了. 创建一个WebViewActivity的内部类 public class XHSWe

  • Android Studio获取网络JSON数据并处理的方法

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 1.需要的网络JSON数据 2.数据实现类 package chenglong.activitytest.pengintohospital.entity; import org.json.JSONException; import org.json.JSONObject; /** * * 科室 * Created by LICHENGLONG on 2017-10-02. */ public class Bas

  • Android WebView打开网页一片空白的解决方法

    问题描述: 网页链接是Https链接 网页链接在电脑的Chrome浏览器中打开正常 网页链接在手机的Chrome浏览器中打开正常 网页链接在IOS的App上打开正常 网页链接在Android App中打开一片空白,没有任何提示 问题原因 试了很多方法,最后发现是Https的证书有问题,由于网页链接是客户提供的,不知道证书是如何生成的,导致不被Android系统信任 问题的发现之旅 网页链接在手机和电脑都能打开,所以想着网页链接本身应该没有问题. debug网页加载的过程也没有发现问题 但是后来用

  • Django后端接收嵌套Json数据及解析详解

    0.干货先写在前 1.前端传值的数据必须使用JSON.stringify()传化 2.后端,通过request.body接收数据,直接使用json.loads解析,解析前,先decode一下:receive_data = json.loads(request.body.decode()).如果使用simplejson.loads(request.body),就不用decode() 下面是这个问题产生及解决的过程,还有一些可能的应用场景. 1.传统方式解析表单数据 之前用Django后台接收数据的

  • OpenMV与JSON编码问题解析

    目录 JSON ujson – JSON编码与解码 Python生成JSON 常用函数 生成JSON字符串 解析JSON字符串 解析JSON对象 JSON 如果想快速尝试两个单片机通信的.推荐使用串口传输json字符串! JSON是一种简洁高效的交换数据的格式. 它可以是这种简单的: "[[12,0],[10,12],[22,10],[99,11]]" 注:我通过这种简单的字符串,把OpenMV中的色块的x,y坐标发送出去. 也可以是这种复杂的:在python中表示多行字符串: '''

  • Android WebView使用方法详解 附js交互调用方法

    目前很多Android app都内置了可以显示web页面的界面,会发现这个界面一般都是由一个叫做WebView的组件渲染出来的,学习该组件可以为你的app开发提升扩展性. 先说下WebView的一些优点: --可以直接显示和渲染web页面,直接显示网页 --webview可以直接用html文件(网络上或本地assets中)作布局 --和JavaScript交互调用 一.基本使用 首先layout中即为一个基本的简单控件: <WebView android:id="@+id/webView1

  • Android WebView与JS交互全面详解(小结)

    Android 和 H5 都是移动开发应用的非常广泛.市面上很多App都是使用Android开发的,但使用Android来开发一些比较复杂附属类,提示性的页面是得不偿失的.而H5具有开发速度快,更新不用依赖于App的更新,只需要服务端更新相应的页面即可,所以,App和H5页面相结合就显得尤为重要.而android和H5都不可能每次都是独立存在的,而是相互影响也相互的调用,获取信息等,例如,H5页面要获取App中的用户的基本信息,或者App端要操作H5页面等,下面来看看这两是怎么交互的 目录 1.

随机推荐