在WebView中将值数组从Android活动传递到JavaScript
我正在使用JS图表库在Android应用程序的WebView中绘制图形。我想提供来自SQLite数据库的数据。目前,我一直在研究如何将数据数组从Java传递到JavaScript。JavaScript部分需要如下内容:在WebView中将值数组从Android活动传递到JavaScript,java,javascript,android,android-webview,Java,Javascript,Android,Android Webview,我正在使用JS图表库在Android应用程序的WebView中绘制图形。我想提供来自SQLite数据库的数据。目前,我一直在研究如何将数据数组从Java传递到JavaScript。JavaScript部分需要如下内容: data = new Array([10, 10], [20, 10]); final class ChartDataLoader { public double[][] getData() { double[][] data = {{10, 10},
data = new Array([10, 10], [20, 10]);
final class ChartDataLoader {
public double[][] getData() {
double[][] data = {{10, 10}, {20, 10}};
return data;
}
}
我了解addJavaScriptInterface
,并设法将单个值从活动传递到Web视图。只是阵列给我带来了麻烦。我想到了这样的事情:
data = new Array([10, 10], [20, 10]);
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>
你应该在这里看到一张图表。
myData=dataLoader.getData();
警报(“数据接收:+myData.length”);
警报(“元素0:+myData[0]);
var myChart=newjschart('chartcontainer','line');
myChart.setDataArray(myData);
myChart.draw();
JavaScript在以下两条警报语句中失败:
错误/Web控制台(2455):未捕获
TypeError:无法读取属性
未定义的at的“长度”
file:///android_asset/chart.html:15
有什么提示吗?我在网上看到一些代码,其他人将数组转换成字符串,然后用JavaScript重新创建它,但这对我来说似乎是一种过火的行为,我希望找到更好的解决方案。另一种方法是将XML文件传递到图表库,但我认为每次用户想要查看图形时创建新的XML都会很慢。要修复最近的错误,需要将myData定义为var 在问题的最后(将数组转换为字符串)讨论的是JSON。任何上下文切换都是昂贵的(例如Android到web)。序列化/反序列化可能不会使您的速度减慢太多 删除行:警报(“DataReceived:+myData.length”)
嗯,是的。。。我认为您必须解析字符串并在JS中重新创建数组。但是,我不明白,为什么会出现这样的问题?