我想将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;
}
}
答案 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)