Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WebView中将值数组从Android活动传递到JavaScript_Java_Javascript_Android_Android Webview - Fatal编程技术网

在WebView中将值数组从Android活动传递到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},

我正在使用JS图表库在Android应用程序的WebView中绘制图形。我想提供来自SQLite数据库的数据。目前,我一直在研究如何将数据数组从Java传递到JavaScript。JavaScript部分需要如下内容:

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中重新创建数组。但是,我不明白,为什么会出现这样的问题?