如何从一个web视图通过JSON格式的数据到HTML页面 [英] How to pass JSON-formatted data from a WebView to a HTML page

查看:140
本文介绍了如何从一个web视图通过JSON格式的数据到HTML页面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从我的Andr​​oid的WebView通过JSON格式的数据到HTML页面。不过,每当我尝试应用程序崩溃解析原始JSON数据,而我期待成为的格式 {关键:数据}

我的应用程序的目的是要跨preT这JSON数据,它的形式为值的数组,并将其发送到一个HTML页面。这是正确的做法采取?

下面是我的WebView code ...

 公共类MyWebView延伸活动{
    的WebView mWebView;

    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.web_view);

        mWebView =(web视图)findViewById(R.id.webviewSch);
        mWebView.getSettings()setJavaScriptEnabled(真)。
        mWebView.addJavascriptInterface(这一点,webConnector);
        mWebView.loadUrl(文件:///android_asset/table.html);
    }

    公共字符串负载(){
        回归{\键\:\数据\};
    }
}
 

这里是HTML code ...

 < HTML>
< HEAD>
<冠军>测试< /标题>
<脚本类型=文/ JavaScript的>

功能装载机(){
    变种jsonData = window.webConnector.load();
}

< / SCRIPT>
< /头>
<身体的onload =装载机()>
没做什么
< /身体GT;
< / HTML>
 

下面是日志猫:

  04-15 00:35:44.551:W / dalvikvm(442):JNI警告:jarray 0x4053f1a0指向非数组对象(Ljava /朗/字符串;)
04-15 00:35:44.551:I / dalvikvm(442):WebViewCoreThreadPRIO = 5 TID = 9 NATIVE
04-15 00:35:44.551:I / dalvikvm(442):|组=主SCOUNT = 0 dsCount = 0的obj = 0x4051bcc0自我= 0x19b200
04-15 00:35:44.551:I / dalvikvm(442):| sysTid = 451漂亮= 0 sched的= 0/0 CGRP =默认的手柄= 1684280
04-15 00:35:44.551:I / dalvikvm(442):| schedstat =(206004592 365607782 69)
04-15 00:35:44.551:I / dalvikvm(442):在android.webkit.LoadListener.nativeFinished(本机方法)
04-15 00:35:44.551:I / dalvikvm(442):在android.webkit.LoadListener.nativeFinished(本机方法)
04-15 00:35:44.551:I / dalvikvm(442):在android.webkit.LoadListener.tearDown(LoadListener.java:1200)
04-15 00:35:44.551:I / dalvikvm(442):在android.webkit.LoadListener.handleEndData(LoadListener.java:721)
04-15 00:35:44.551:I / dalvikvm(442):在android.webkit.LoadListener.handleMessage(LoadListener.java:219)
04-15 00:35:44.551:I / dalvikvm(442):在android.os.Handler.dispatchMessage(Handler.java:99)
04-15 00:35:44.551:I / dalvikvm(442):在android.os.Looper.loop(Looper.java:130)
04-15 00:35:44.551:I / dalvikvm(442):在android.webkit.WebViewCore $ WebCoreThread.run(WebViewCore.java:629)
04-15 00:35:44.551:I / dalvikvm(442):在java.lang.Thread.run(Thread.java:1019)
04-15 00:35:44.551:E / dalvikvm(442):虚拟机中止
 

解决方案

我复制粘贴到你的code和它的工作原理(什么也不显示,因为你不显示数据),但是从使用Javascript制作成Android的回调执行正确。你可以用这个code检查:

 的WebView mWebView =(web视图)findViewById(R.id.webView1);
    mWebView.getSettings()setJavaScriptEnabled(真)。
    mWebView.addJavascriptInterface(这一点,webConnector);
    mWebView.addJavascriptInterface(这一点,烤面包机);
    mWebView.loadUrl(文件:///android_asset/table.html);
    }

    公共字符串负载(){
        Log.e(HelloJavascript,HelloJavascript);
        回归{\键\:\数据\};
    }

    公共无效打印(字符串消息){
        Toast.makeText(此,信息,Toast.LENGTH_SHORT).show();
    }
 

和HTML

 < HTML>
    < HEAD>
    <冠军>测试< /标题>
    <脚本类型=文/ JavaScript的>

    功能装载机(){
        变种jsonData = window.webConnector.load();
        toaster.print(jsonData);
    }

    < / SCRIPT>
    < /头>
    <身体的onload =装载机()>
    没做什么
    < /身体GT;
    < / HTML>
 

I am trying to pass JSON-formatted data from my Android WebView to a HTML page. However, the app crashes whenever I try to parse the original JSON data, which I am expecting to be of the format {"key":"data"}

The aim of my app will be to interpret this JSON data, form it into an array of values, and send it to a HTML page. Is this the correct approach to take?

Here is my WebView code...

public class MyWebView extends Activity {
    WebView mWebView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.web_view);

        mWebView = (WebView) findViewById(R.id.webviewSch);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.addJavascriptInterface(this, "webConnector");
        mWebView.loadUrl("file:///android_asset/table.html");
    }

    public String load() {
        return "{\"key\":\"data\"}";
    }
}

And here is the HTML code...

<html>
<head>
<title>Test</title>
<script type="text/javascript">

function loader() {
    var jsonData = window.webConnector.load();
}

</script>
</head>
<body onload="loader()">
Do nothing
</body>
</html> 

Here is the log cat:

04-15 00:35:44.551: W/dalvikvm(442): JNI WARNING: jarray 0x4053f1a0 points to non-array object (Ljava/lang/String;)
04-15 00:35:44.551: I/dalvikvm(442): "WebViewCoreThread" prio=5 tid=9 NATIVE
04-15 00:35:44.551: I/dalvikvm(442):   | group="main" sCount=0 dsCount=0 obj=0x4051bcc0 self=0x19b200
04-15 00:35:44.551: I/dalvikvm(442):   | sysTid=451 nice=0 sched=0/0 cgrp=default handle=1684280
04-15 00:35:44.551: I/dalvikvm(442):   | schedstat=( 206004592 365607782 69 )
04-15 00:35:44.551: I/dalvikvm(442):   at android.webkit.LoadListener.nativeFinished(Native Method)
04-15 00:35:44.551: I/dalvikvm(442):   at android.webkit.LoadListener.nativeFinished(Native Method)
04-15 00:35:44.551: I/dalvikvm(442):   at android.webkit.LoadListener.tearDown(LoadListener.java:1200)
04-15 00:35:44.551: I/dalvikvm(442):   at android.webkit.LoadListener.handleEndData(LoadListener.java:721)
04-15 00:35:44.551: I/dalvikvm(442):   at android.webkit.LoadListener.handleMessage(LoadListener.java:219)
04-15 00:35:44.551: I/dalvikvm(442):   at android.os.Handler.dispatchMessage(Handler.java:99)
04-15 00:35:44.551: I/dalvikvm(442):   at android.os.Looper.loop(Looper.java:130)
04-15 00:35:44.551: I/dalvikvm(442):   at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:629)
04-15 00:35:44.551: I/dalvikvm(442):   at java.lang.Thread.run(Thread.java:1019)
04-15 00:35:44.551: E/dalvikvm(442): VM aborting

解决方案

I copy pasted your code and it works (nothing is shown because you dont show the data) but the callback made from the Javascript into Android is executed correctly. You can check it with this code:

    WebView mWebView = (WebView) findViewById(R.id.webView1);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.addJavascriptInterface(this, "webConnector");
    mWebView.addJavascriptInterface(this, "toaster");
    mWebView.loadUrl("file:///android_asset/table.html");
    }

    public String load() {
        Log.e("HelloJavascript","HelloJavascript");
        return "{\"key\":\"data\"}";
    }

    public void print(String message){
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
    }

And the HTML

    <html>
    <head>
    <title>Test</title>
    <script type="text/javascript">

    function loader() {
        var jsonData = window.webConnector.load();
        toaster.print(jsonData);
    }

    </script>
    </head>
    <body onload="loader()">
    Do nothing
    </body>
    </html> 

这篇关于如何从一个web视图通过JSON格式的数据到HTML页面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆