Android WebView交互傳遞json字符串并解析的方法
前言
我們大家都知道WebView交互中可以傳遞基本數(shù)據(jù)類型的數(shù)據(jù)值,比如常用的int,String.
但是WebView也可以傳遞一種很重要很常用的數(shù)據(jù)格式-json數(shù)據(jù).
傳遞json和傳遞String數(shù)據(jù)是一樣的,關(guān)鍵就是HTML5端對(duì)json數(shù)據(jù)通過(guò)eval()函數(shù)進(jìn)行解析
傳遞過(guò)程中android端調(diào)用的最重要的一個(gè)函數(shù)就是:
addJavascriptInterface(new MyObject(this,”dd”),”my”); 這個(gè)函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)傳入的是含有實(shí)現(xiàn)了JavaScript中的方法,并且使用@JavascriptInterface注解標(biāo)識(shí)這個(gè)方法是被JS代碼調(diào)用的,第二個(gè)參數(shù)是一個(gè)橋接字符串,這個(gè)橋接字符串可以隨意定義,只要android端和JavaScript端保持一致就可以.
下面附上傳遞json數(shù)據(jù)的完整Demo
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>測(cè)試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(){
//通過(guò)暴露的my對(duì)象來(lái)獲取數(shù)據(jù)
var data = my.getData();
//將json字符串轉(zhuǎn)換為數(shù)組
var f = eval(data);
//向表格填充數(shù)據(jù)
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();
//調(diào)用WebView關(guān)聯(lián)的WebSettings中setJavaScriptEnable(true)方法。
settings.setJavaScriptEnabled(true);
wv.loadUrl("file:///android_asset/index.html");
//調(diào)用WebView關(guān)聯(lián)的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;
}
}
運(yùn)行效果截圖如下

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Android編譯出現(xiàn)Warning:Mapping?new?ns?to?old?ns報(bào)錯(cuò)的解決方案
android在編譯的過(guò)程中難免會(huì)出現(xiàn)些錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于Android編譯出現(xiàn)Warning:Mapping?new?ns?to?old?ns報(bào)錯(cuò)的解決方案,需要的朋友可以參考下2023-02-02
Android中AlertDialog四種對(duì)話框的最科學(xué)編寫用法(實(shí)例代碼)
這篇文章主要介紹了Android中AlertDialog四種對(duì)話框的最科學(xué)編寫用法,本文通過(guò)代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
Android實(shí)現(xiàn)通過(guò)手勢(shì)控制圖片大小縮放的方法
這篇文章主要介紹了Android實(shí)現(xiàn)通過(guò)手勢(shì)控制圖片大小縮放的方法,結(jié)合實(shí)例形式分析了Android控制圖片縮放的原理、實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2016-10-10
Android通過(guò)自定義控件實(shí)現(xiàn)360軟件詳情頁(yè)效果
這篇文章主要給大家介紹了Android通過(guò)自定義控件實(shí)現(xiàn)360軟件詳情頁(yè)效果的相關(guān)資料,實(shí)現(xiàn)后的效果非常不錯(cuò),文中也給出了詳細(xì)的示例代碼和介紹,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-05-05
Android實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android RecyclerView 上拉加載更多及下拉刷新功能的實(shí)現(xiàn)方法
這篇文章主要介紹了Android RecyclerView 上拉加載更多及下拉刷新的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
Android自定義PopWindow帶動(dòng)畫向下彈出效果
這篇文章主要為大家詳細(xì)介紹了Android自定義PopWindow帶動(dòng)畫向下彈出效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
adb wireless進(jìn)行Android手機(jī)調(diào)試詳解
這篇文章給大家講解了在Android手機(jī)上使用adb wireless進(jìn)行調(diào)試的步驟以及問(wèn)題解決辦法,有需要的跟著學(xué)習(xí)下吧。2017-12-12
Android 桌面圖標(biāo)右上角顯示未讀消息數(shù)字
本文主要介紹了Android 桌面圖標(biāo)右上角顯示未讀消息數(shù)字的方法。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04

