Android アプリケーションの WebView でグラフを描画するために JS Charts ライブラリを使用しています。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 は、次の 2 つのアラート ステートメントで失敗します。
エラー/Web コンソール (2455): キャッチされていない TypeError: ファイル:///android_asset/chart.html:15 で未定義のプロパティ '長さ' を読み取ることができません
ヒントはありますか?他の人が配列を String に変換してから JavaScript で再作成するコードをオンラインでいくつか見ましたが、それはやり過ぎのように思え、より良い解決策を望んでいました。別の方法として、XML ファイルをグラフ ライブラリに渡すこともできますが、ユーザーがグラフを表示するたびに新しい XML を作成するのは時間がかかると思いました。