MPChart IndexOutOfBoundsException:索引:25,大小:25

时间:2019-03-29 08:42:22

标签: java android mpandroidchart

在Android中使用MPCharts绘制LineChart,并抛出"IndexOutOfBoundsException: Index: 25, Size: 25"。遍历了示例,但仍然遇到相同的错误。发现下面的代码

 private void drawLineChart() {

    List<Entry> entries = new ArrayList<Entry>();

    System.out.println("valueList"+valueList.size());

    for (int i = 0; i <= valueList.size(); i++){

        entries.add(new Entry(valueList.get(i),(float)i));

    }

    LineChart lineChart = findViewById(R.id.myLineChart);
    Description description = new Description();
    description.setText("My Line Chart");
    lineChart.setDescription(description);

    LineDataSet lineDataSet = new LineDataSet(entries, "Line chart");
    lineDataSet.setDrawFilled(true);
    lineDataSet.setColors(ColorTemplate.COLORFUL_COLORS);

    LineData lineData = new LineData(lineDataSet);
    lineData.setValueFormatter(new ReportChartXAxisValueFormater(getXAxisValues()));

    lineChart.setData(lineData);
    lineChart.animateXY(2000,2000);
    lineChart.invalidate();

} 

ValueList具有25个值

3 个答案:

答案 0 :(得分:1)

解决方案

将条件从(较低或相等)更改为

i <= valueList.size()

到(下):

i < valueList.size()

正确的代码:

//      change char here (from <=  to  < )
//                ||
//                \/
for (int i = 0; i < valueList.size(); i++){
    // your code there
}

您有25个元素。列表的大小为25

但是索引从024

示例:

索引从0开始。

因此对于5元素,您具有以下位置:

element:   "ABC",     "DEF",     "GHI",     "JKL",     "MNO",  
position:    0          1          2          3          4

大小为5(因为您有5个元素)。

但是最后一个索引是4。这就是您的迭代器无法达到列表大小的原因。

答案 1 :(得分:0)

这是问题

for (int i = 0; i <= valueList.size(); i++)

应该是

for (int i = 0; i < valueList.size(); i++)

Java索引始于0,结束于size()-1,因此当您使用get()(25英寸)时,IndexOutOfBoundsException调用将抛出size()这种情况。

答案 2 :(得分:0)

索引从零开始,以大小1结束

for (int i = 0; i <= valueList.size(); i++){...

您正在使用<=,它还将包括最后一个不会出现的索引,因此是例外。将<=替换为<或使用size()-1