我正在使用 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):未捕获的类型错误:无法读取文件中未定义的属性“长度”:///android_asset/chart.html:15
有什么提示吗?我在网上看到一些代码,其他人将数组转换为字符串,然后用 JavaScript 重新创建它,但这对我来说似乎有点过头了,我希望有更好的解决方案。另一种方法是将 XML 文件传递给图表库,但我认为每次用户想要查看图表时创建新的 XML 会很慢。