今天在利用AChartEngine开发图表过程中发现一个奇怪的问题,
在调用XYMultipleSeriesRenderer对象setDisplayChartValues(true)时,应用就会报数组越界错误。
12-20 07:15:27.331: E/AndroidRuntime(339): FATAL EXCEPTION: main
12-20 07:15:27.331: E/AndroidRuntime(339): java.lang.IndexOutOfBoundsException: Invalid index 12, size is 12
12-20 07:15:27.331: E/AndroidRuntime(339): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
12-20 07:15:27.331: E/AndroidRuntime(339): at java.util.ArrayList.get(ArrayList.java:311)
12-20 07:15:27.331: E/AndroidRuntime(339): at org.achartengine.util.IndexXYMap.getYByIndex(IndexXYMap.java:80)
12-20 07:15:27.331: E/AndroidRuntime(339): at org.achartengine.model.XYSeries.getY(XYSeries.java:169)
12-20 07:15:27.331: E/AndroidRuntime(339): at org.achartengine.chart.XYChart.drawChartValuesText(XYChart.java:551)
12-20 07:15:27.331: E/AndroidRuntime(339): at org.achartengine.chart.XYChart.drawSeries(XYChart.java:502)
12-20 07:15:27.331: E/AndroidRuntime(339): at org.achartengine.chart.XYChart.draw(XYChart.java:286)
12-20 07:15:27.331: E/AndroidRuntime(339): at org.achartengine.GraphicalView.onDraw(GraphicalView.java:166)
12-20 07:15:27.331: E/AndroidRuntime(339): at android.view.View.draw(View.java:6880)
12-20 07:15:27.331: E/AndroidRuntime(339): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
经过分析发现存在以下规律:
当displayChartValues属性为true之后,在绘图时AChartEngine将会按照XYSeries对象的x轴的取值作为索引,
如果X轴的取值不是从1开始循环之后将会出现索引越界的错误。
此时在设置XYSeries的X轴的值的时候需要按照索引顺序指定,即1,2,3...
如果想要保存X轴的取值就不能设定setDisplayChartValues(true)。