在WebView中将一组值从Android Activity传递到JavaScript

时间:2010-12-02 02:03:12

标签: java javascript android android-webview

我正在使用JS Charts库在我的Android应用程序的WebView中绘制图形。我想提供SQLite数据库中的数据。此时我仍然坚持如何将数据从Java传递到JavaScript。 JavaScript部分需要这样的东西:

data = new Array([10, 10], [20, 10]);

我知道addJavaScriptInterface,我设法将单个值从我的Activity传递给WebView。这只是阵列给我带来麻烦。我想到了类似的东西:

final class ChartDataLoader {

    public double[][] getData() {
        double[][] data = {{10, 10}, {20, 10}};
        return data;
    }
}

请注意,目前我只是对数据进行硬编码,但最终会从数据库中提取出来。那么我把它暴露给我的JS:

webView.addJavascriptInterface(new ChartDataLoader(), "dataLoader");

最后尝试用JavaScript阅读:

<html>
<head>
<script type="text/javascript" src="jscharts.js"></script>
</head>

<body>
<div id="chartcontainer">You should see a chart here.</div>

<script type="text/javascript">

 myData = dataLoader.getData(); 
 alert("DataReceived: " + myData.length);
 alert("Element 0 : " + myData[0]);

 var myChart = new JSChart('chartcontainer', 'line');
 myChart.setDataArray(myData);
 myChart.draw();

</script>
</body>
</html>

JavaScript失败了两条警告声明:

  

错误/ Web控制台(2455):未捕获   TypeError:无法读取属性   未定义的'长度'   文件:///android_asset/chart.html:15

任何提示?我在网上看到一些代码,其他人将数组转换为String,然后用JavaScript重新创建它,但这似乎对我来说太过分了,我希望有更好的解决方案。另一种方法是将XML文件传递给图表库,但同样,我认为每次用户想要查看图表时创建新XML都会很慢。

2 个答案:

答案 0 :(得分:5)

  

删除行:alert(“DataReceived:”+ myData.length);

答案 1 :(得分:0)

要修复将myData定义为var。

所需的最新错误

您在问题的最后(将数组转换为字符串)中谈到的是JSON。任何上下文切换都很昂贵(例如Android到Web)。序列化/反序列化可能不会减慢你的速度。