Я использую библиотеку JS Charts для рисования графиков в WebView моего приложения для Android.Я хочу предоставить данные из базы данных 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 в этих двух операторах оповещения с указанием:
ОШИБКА / Веб-консоль (2455): Uncaught TypeError: Невозможно прочитать свойство 'length' с неопределенным значением в файле: ///android_asset/chart.html: 15
Есть подсказки?Я видел в Интернете некоторый код, где другие люди конвертируют массивы в строку, а затем воссоздают его обратно в JavaScript, но мне это кажется излишним, и я надеялся на лучшее решение.Альтернативой является передача файла XML в библиотеку диаграмм, но, опять же, я думал, что будет медленно создавать новый XML каждый раз, когда пользователь хочет увидеть график.