我正在使用一个JS库在我的安卓应用程序的WebView中绘制图形。我想从SQLite数据库中提供数据。此时,我一直在讨论如何将数据数组从Java传递到JavaScript。JavaScript部分期望类似这样的内容:
data = new Array([10, 10], [20, 10]);我了解addJavaScriptInterface,并设法将单个值从活动传递到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在这两条警告语句上失败,声明:
file:///android_asset/chart.html:15上未定义的
错误/控制台(2455):未定义的TypeError:无法读取未定义的属性“长度”
有什么暗示吗?我在网上看到了一些代码,其他人将数组转换为字符串,然后在JavaScript中重新创建它,但对我来说,这似乎是过头了,我希望找到一个更好的解决方案。另一种方法是将XML文件传递给图表库,但我认为每次用户想要看到图表时创建一个新的XML都会很慢。
发布于 2012-11-12 09:23:05
删除行:警告(“DataReceived:”+ myData.length);
发布于 2010-12-02 02:26:57
要修复最近的错误,需要将myData定义为变量。
在问题的末尾(将数组转换为字符串),您谈论的是JSON。任何上下文切换都是昂贵的(例如,Android到web)。序列化/反序列化可能不会拖慢你的脚步。
https://stackoverflow.com/questions/4331004
复制相似问题