Hello,
I use your library for my app. Thank you very much for your work, it looks perfect. My users reported some problems, so could you please take a look, if there is some bug in your code or am I doing something wrong? Thank you for your response.
Android 4.4, Samsung Galaxy S4 Mini
java.lang.ArrayIndexOutOfBoundsException: length=12; index=12
at myapp.GraphActivity$MyXAxisValueFormatter.getFormattedValue(GraphActivity.java:461)
at com.github.mikephil.charting.components.AxisBase.getFormattedLabel(AxisBase.java:472)
at com.github.mikephil.charting.components.AxisBase.getLongestLabel(AxisBase.java:458)
at com.github.mikephil.charting.renderer.XAxisRenderer.computeSize(XAxisRenderer.java:79)
at com.github.mikephil.charting.renderer.XAxisRenderer.computeAxisValues(XAxisRenderer.java:74)
at com.github.mikephil.charting.renderer.XAxisRenderer.computeAxis(XAxisRenderer.java:67)
at com.github.mikephil.charting.charts.BarLineChartBase.notifyDataSetChanged(BarLineChartBase.java:329)
at com.github.mikephil.charting.charts.Chart.onSizeChanged(Chart.java:1691)
at com.github.mikephil.charting.charts.BarLineChartBase.onSizeChanged(BarLineChartBase.java:1584)
at android.view.View.sizeChange(View.java:15864)
at android.view.View.setFrame(View.java:15837)
at android.view.View.layout(View.java:15745)
at android.view.ViewGroup.layout(ViewGroup.java:4880)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
at android.view.View.layout(View.java:15749)
at android.view.ViewGroup.layout(ViewGroup.java:4880)
at android.widget.ListView.setupChild(ListView.java:1905)
at android.widget.ListView.makeAndAddView(ListView.java:1816)
at android.widget.ListView.fillSpecific(ListView.java:1348)
at android.widget.ListView.layoutChildren(ListView.java:1619)
at android.widget.AbsListView.onLayout(AbsListView.java:2564)
at android.view.View.layout(View.java:15749)
at android.view.ViewGroup.layout(ViewGroup.java:4880)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:15749)
at android.view.ViewGroup.layout(ViewGroup.java:4880)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
at android.view.View.layout(View.java:15749)
at android.view.ViewGroup.layout(ViewGroup.java:4880)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:15749)
at android.view.ViewGroup.layout(ViewGroup.java:4880)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:15749)
at android.view.ViewGroup.layout(ViewGroup.java:4880)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:15749)
at android.view.ViewGroup.layout(ViewGroup.java:4880)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
at android.view.View.layout(View.java:15749)
at android.view.ViewGroup.layout(ViewGroup.java:4880)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:15749)
at android.view.ViewGroup.layout(ViewGroup.java:4880)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2358)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2071)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1256)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6635)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813)
at android.view.Choreographer.doCallbacks(Choreographer.java:613)
at android.view.Choreographer.doFrame(Choreographer.java:583)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5593)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
There is code in my app:
`public class MyXAxisValueFormatter implements IAxisValueFormatter {
private String[] mValues;
public MyXAxisValueFormatter(String[] values) {
this.mValues = values;
}
@Override
public String getFormattedValue(float value, AxisBase axis) {
// "value" represents the position of the label on the axis (x or y)
return mValues[(int) value]; // line 461
}
}`
LineData data = new LineData(dataSets);
holder.lineChart.setData(data);
XAxis xAxis = holder.lineChart.getXAxis();
xAxis.setValueFormatter(new MyXAxisValueFormatter(values));
xAxis.setGranularity(1f);
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setTextSize(11f);
xAxis.setTextColor(getResources().getColor(R.color.TextColor));
xAxis.setDrawAxisLine(false);
xAxis.setDrawGridLines(true);
xAxis.setGridColor(getResources().getColor(R.color.grey300));
And there is something similar, maybe, Android 5.1, Moto G:
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.github.mikephil.charting.data.DataSet.getEntryForIndex(DataSet.java:286)
at com.github.mikephil.charting.utils.Transformer.generateTransformedValuesLine(Transformer.java:184)
at com.github.mikephil.charting.renderer.LineChartRenderer.drawValues(LineChartRenderer.java:545)
at com.github.mikephil.charting.charts.BarLineChartBase.onDraw(BarLineChartBase.java:261)
at android.view.View.draw(View.java:15249)
at android.view.View.updateDisplayListIfDirty(View.java:14185)
at android.view.View.getDisplayList(View.java:14207)
at android.view.View.draw(View.java:14977)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200)
at android.view.View.draw(View.java:15252)
at android.view.View.updateDisplayListIfDirty(View.java:14185)
at android.view.View.getDisplayList(View.java:14207)
at android.view.View.draw(View.java:14977)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200)
at android.view.View.draw(View.java:15252)
at android.widget.FrameLayout.draw(FrameLayout.java:598)
at android.widget.ScrollView.draw(ScrollView.java:1692)
at android.view.View.updateDisplayListIfDirty(View.java:14185)
at android.view.View.getDisplayList(View.java:14207)
at android.view.View.draw(View.java:14977)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200)
at android.view.View.draw(View.java:15252)
at android.view.View.updateDisplayListIfDirty(View.java:14185)
at android.view.View.getDisplayList(View.java:14207)
at android.view.View.draw(View.java:14977)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200)
at android.view.View.draw(View.java:15252)
at android.widget.FrameLayout.draw(FrameLayout.java:598)
at android.view.View.updateDisplayListIfDirty(View.java:14185)
at android.view.View.getDisplayList(View.java:14207)
at android.view.View.draw(View.java:14977)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200)
at android.view.View.draw(View.java:15252)
at android.view.View.updateDisplayListIfDirty(View.java:14185)
at android.view.View.getDisplayList(View.java:14207)
at android.view.View.draw(View.java:14977)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200)
at android.view.View.draw(View.java:15252)
at android.widget.FrameLayout.draw(FrameLayout.java:598)
at android.view.View.updateDisplayListIfDirty(View.java:14185)
at android.view.View.getDisplayList(View.java:14207)
at android.view.View.draw(View.java:14977)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200)
at android.view.View.draw(View.java:15252)
at android.widget.FrameLayout.draw(FrameLayout.java:598)
at android.view.View.updateDisplayListIfDirty(View.java:14185)
at android.view.View.getDisplayList(View.java:14207)
at android.view.View.draw(View.java:14977)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200)
at android.view.View.draw(View.java:15252)
at android.widget.FrameLayout.draw(FrameLayout.java:598)
at android.view.View.updateDisplayListIfDirty(View.java:14185)
at android.view.View.getDisplayList(View.java:14207)
at android.view.View.draw(View.java:14977)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200)
at android.view.View.draw(View.java:15252)
at android.view.View.updateDisplayListIfDirty(View.java:14185)
at android.view.View.getDisplayList(View.java:14207)
at android.view.View.draw(View.java:14977)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3200)
at android.view.View.draw(View.java:15252)
at android.widget.FrameLayout.draw(FrameLayout.java:598)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2650)
at android.view.View.updateDisplayListIfDirty(View.java:14185)
at android.view.View.getDisplayList(View.java:14207)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2560)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2382)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2012)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5990)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
I hava a same problem
* java.lang.RuntimeException: Unable to start activity ComponentInfo{hk.demompandroidchart/hk.demompandroidchart.LineChartTestActivity}: java.lang.ArrayIndexOutOfBoundsException: length=4; index=35
*
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=4; index=35
at hk.demompandroidchart.MyXFormatter.getFormattedValue(MyXFormatter.java:21)
at com.github.mikephil.charting.components.AxisBase.getFormattedLabel(AxisBase.java:472)
at com.github.mikephil.charting.components.AxisBase.getLongestLabel(AxisBase.java:458)
at com.github.mikephil.charting.renderer.XAxisRenderer.computeSize(XAxisRenderer.java:79)
at com.github.mikephil.charting.renderer.XAxisRenderer.computeAxisValues(XAxisRenderer.java:74)
at com.github.mikephil.charting.renderer.XAxisRenderer.computeAxis(XAxisRenderer.java:67)
at com.github.mikephil.charting.charts.BarLineChartBase.notifyDataSetChanged(BarLineChartBase.java:329)
at com.github.mikephil.charting.charts.Chart.setData(Chart.java:304)
at hk.demompandroidchart.LineChartTestActivity.onCreate(LineChartTestActivity.java:56)
at android.app.Activity.performCreate(Activity.java:5385)
me too, same problem
I had this issue too, I resolved with something like this.
@Override
public String getFormattedValue(float value, AxisBase axis) {
int intValue = (int) value;
if (mValues.length > intValue && intValue >= 0) return mValues[intValue];
return "";
}
me too,why?
sometime times is ok,but is not work mostly ,and I don't change the code
Try this:
axis.setGranularity(1f);
axis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
String val = null;
try {
val = labels.get((int) value);
} catch (IndexOutOfBoundsException e) {
axis.setGranularityEnabled(false);
}
return val;
}
});
Most helpful comment
I had this issue too, I resolved with something like this.