在使用安卓图表AChartEngine时报错:
10-29 08:55:39.061: E/AndroidRuntime(23399): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
10-29 08:55:39.061: E/AndroidRuntime(23399): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
代码如下:
int[] colors = new int[] { Color.parseColor("#4386d8") };
PointStyle[] styles = new PointStyle[] { PointStyle.POINT };
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(1);
setRenderer(renderer, colors, styles);
int length = renderer.getSeriesRendererCount();
for (int i = 0; i < length; i++) {
XYSeriesRenderer r = (XYSeriesRenderer) renderer
.getSeriesRendererAt(i);
r.setLineWidth(2.5f);
r.setDisplayChartValues(true); //显示值
r.setChartValuesTextSize(20f);
r.setChartValuesTextAlign(Align.CENTER);
//线的下面填充颜色
FillOutsideLine fill = new FillOutsideLine(FillOutsideLine.Type.BOUNDS_ABOVE);
fill.setColor(Color.GREEN);
r.addFillOutsideLine(fill);
}
问题在哪里?根据网上找的各种信息,改了好多次,都没解决,还报同样的错。
后来在网上一篇文章中的案例中发现了一个细节,修改一下问题就解决了:
注意这一句:
FillOutsideLine fill = new FillOutsideLine(FillOutsideLine.Type.BOUNDS_ABOVE);
在声明 fill 的时候,有个参数: FillOutsideLine.Type.BOUNDS_ABOVE,说的是图表在X轴上方的部分(一般为正数),对应的,还有 FillOutsideLine.Type.BELOW,X轴下方的部分(一般为负数),如果把BOUNDS_ABOVE换成BOUNDS_ALL,也就是说上面和下面一样处理:
FillOutsideLine fill = new FillOutsideLine(FillOutsideLine.Type.BOUNDS_ALL);