MPAndroidChart值格式化程序超出数组范围

时间:2017-11-14 08:09:42

标签: java android mpandroidchart formatter

我想将XAxis值从int格式化为String(实际上是日期)问题是格式化程序在达到ArrayList大小时没有停止并且我没有超出数组范围异常。我该怎么办?

    barEntries=new ArrayList <> (  );
    XAxisLabels=new ArrayList <> (  );
    barEntries.add ( new BarEntry ( 0,0 ) );
    XAxisLabels.add ( "2017-10-29 09:26:07" );
    barEntries.add ( new BarEntry ( 1,400 ) );
    XAxisLabels.add ( "2017-10-28 19:04:22" );
    barEntries.add ( new BarEntry ( 2,200 ) );
    XAxisLabels.add ( "2017-10-28 19:05:12" );
    barEntries.add ( new BarEntry ( 3,300 ) );
    XAxisLabels.add ( "2017-10-29 09:26:07" );

            BarDataSet barDataSet = new BarDataSet ( barEntries, "DataSet" );
            barDataSet.setColors ( ColorTemplate.COLORFUL_COLORS );

            BarData barData = new BarData ( barDataSet );

            XAxis xAxis = barChart.getXAxis ( );
            xAxis.setPosition ( XAxis.XAxisPosition.BOTH_SIDED );
            xAxis.setValueFormatter ( new MyXAxisValueFormatter ( XAxisLabels ) );
            //xAxis.setGranularity ( 1 );
            xAxis.setCenterAxisLabels ( true );
            //xAxis.setAxisMinimum ( 1 );
            barChart.setData ( barData );
            barChart.notifyDataSetChanged ( );
            barChart.invalidate ( );

我的格式化程序:

public class MyXAxisValueFormatter implements IAxisValueFormatter{
        int counter=0;
        private ArrayList <String> mValues = new ArrayList <> (  );
        public MyXAxisValueFormatter(ArrayList<String> values)
        {
            this.mValues=values;
        }
        @Override
        public String getFormattedValue ( float value, AxisBase axis ) {
            String x;
            value=value+counter*0.3f;
            counter++;
            x= mValues.get ( (int)value);
            return x;
        }
}

Application screenshot

3 个答案:

答案 0 :(得分:2)

public class MyXAxisValueFormatter implements IAxisValueFormatter {
private List labels;

public MyXAxisValueFormatter(List<String> labels) {
    this.labels = labels;
}

@Override
public String getFormattedValue(float value, AxisBase axis) {
    try {
        int index = (int) value;
        return labels.get(index);
    } catch (Exception e) {
        return "";
    }
}
}

答案 1 :(得分:1)

我有类似问题 - 我的格式从 -1 开始 - > 所以我有 java.lang.ArrayIndexOutOfBoundsException 所以我修复是这样的:

@Override
    public String getFormattedValue(float value) {

        if (((int) value) < values.size() && (int) value >= 0) {
            //Log.e(TAG, "getFormattedValue: " + (int) value); // value is -1, exception!
            String strDate = values.get((int) value);
            if (mCurrentRange == 7)
                strDate = getDayOfWeekFromStr(strDate);
            else strDate = removeYearFromDate(strDate);
            return strDate;
        } else {
            return "0";
        }
    }

答案 2 :(得分:0)

在将String添加到xaxis时遇到一些问题

{
                    ArrayList<Entry> yvalues = new ArrayList<>();
                    ArrayList<String> labels = new ArrayList<String>();
                    String[] values = new String[]{"Jan","Feb","Mac"};
                    for (int i = 0; i < graphData.getDate().size(); i++) {
                        yvalues.add(new Entry(i,Float.parseFloat(graphData.getMeasurement().get(i))));
                    }
                    lineChart.getAxisRight().setEnabled(false);
                    LineDataSet dataSet = new LineDataSet(yvalues, "Cells");
                    dataSet.setFillAlpha(110);
                    ArrayList<ILineDataSet> dataSets = new ArrayList<>();
                    dataSets.add(dataSet);
                    dataSet.setLineWidth(3f);
                    dataSet.setValueTextColor(Color.WHITE);
                    dataSet.setColor(Color.RED);
                    LineData data = new LineData(dataSets);
                    lineChart.setData(data);
                    XAxis xAxis = lineChart.getXAxis();
                    xAxis.setValueFormatter(new MyXAxisValueFormatter(values));

                }

MyXAxisValueFormatter是这个

public class XAxisValueFormatter extends IAxisValueFormatter{
    private String[] mvalues;
    public XAxisValueFormatter(String[] mvalues){
        this.mvalues = mvalues;
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        System.out.println("value"+mvalues[(int)value]);
        return mvalues[(int)value];
    }
}

MyXAxisValueFormatter添加值时,显示错误

  

setValueFormatter(com.github.mikephil.chartinf.formatter.ValueFormatter)   在AxisBase中不能应用于   (com.anu.myapp.myFragment.XAxisValueFormatter)