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

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

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

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

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

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

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

最后尝试用JavaScript阅读:

      
You should see a chart here.
myData = dataLoader.getData(); alert("DataReceived: " + myData.length); alert("Element 0 : " + myData[0]); var myChart = new JSChart('chartcontainer', 'line'); myChart.setDataArray(myData); myChart.draw();

JavaScript在这两个警告声明中失败,说明:

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

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

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

要修复最近的错误,您需要将myData定义为var。

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