2012-04-11 14 views
9

Android WebViewからJSON形式のデータをHTMLページに渡そうとしています。しかし、元のJSONデータを解析しようとするとアプリがクラッシュする。{"key":"data"}JSON形式のデータをWebViewからHTMLページに渡す方法

私のアプリの目的は、このJSONデータを解釈して値の配列にし、それをHTMLページに送信します。これは正しいアプローチですか?

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 
+0

はあなたのログから、あなたのスタックトレースを投稿してください。 – kabuko

+0

私はエミュレータを4.0.3に変更しました。 – DBoy

答えて

8

私がコピーします。ここでは

はここ

<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> 

がログ猫です...

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\"}"; 
    } 
} 

そして、ここでは、HTMLコードです...私のWebViewのコードですあなたのコードを貼り付け、それは動作します(何も表示されないため、データを表示しません)が、JavascriptからAndroidへのコールバックが実行されます。 ctly。あなたは、このコードでそれを確認することができます。

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(); 
    } 

そして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> 
+0

返信いただきありがとうございますAddev。私はあなたのコードを試しましたが、それはまだ粉砕します。しかし、私は4.0.3にエミュレータを変更した後、それは働いた! – DBoy

+0

以前は何をしていたのか分かりませんが、JavaScriptのインターフェースにはバグがありました。 – Maarten

+0

"Uncaught TypeError:window.webConnector.loadは関数ではありません"、source:myaddress " なぜか分かりますか? – Naeim

関連する問題