2012-04-11 3 views
9

Я пытаюсь передать JSON-форматированные данные из моего Android WebView на HTML-страницу. Тем не менее, приложение падает каждый раз, когда я пытаюсь проанализировать исходные данные JSON, которые я ожидаю от формата {"key":"data"}Как передать JSON-форматированные данные из WebView на HTML-страницу

Целью моего приложения будет интерпретация данных JSON, формирование его в виде массива значений, и отправить его на страницу HTML. Это правильный подход?

Вот мой WebView код ...

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 код ...

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

Вот лог кошки:

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

скопировать вставил ваш код, и он работает (ничего не отображается, потому что вы не показываете данные), но обратный вызов, сделанный из 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 есть ошибка в 2.3 – Maarten

+0

«Некопать TypeError: window.webConnector.load не является функцией», источник: myaddress « Знаете ли вы, почему? – Naeim