Reputation: 51
I have searched around google and have tried some "solutions" however none work for me. I am using 'com.github.PhilJay:MPAndroidChart:v3.1.0' and trying to make a line chart.
The error code is the following:
2021-06-29 11:57:35.319 com.example.myApp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myApp, PID: 15886
java.lang.NegativeArraySizeException: -58
at com.github.mikephil.charting.utils.Transformer.generateTransformedValuesLine(Transformer.java:178)
at com.github.mikephil.charting.renderer.LineChartRenderer.drawValues(LineChartRenderer.java:549)
at com.github.mikephil.charting.charts.BarLineChartBase.onDraw(BarLineChartBase.java:278)
at android.view.View.draw(View.java:23901)
at android.view.View.updateDisplayListIfDirty(View.java:22776)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.draw(View.java:23904)
at android.view.View.updateDisplayListIfDirty(View.java:22776)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.updateDisplayListIfDirty(View.java:22762)
at android.view.View.draw(View.java:23631)
at android.view.ViewGroup.drawChild(ViewGroup.java:5336)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093)
at android.view.View.draw(View.java:23904)
at com.android.internal.policy.DecorView.draw(DecorView.java:1282)
at android.view.View.updateDisplayListIfDirty(View.java:22776)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:579)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:585)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:662)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:4994)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4701)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3818)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2575)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9916)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1010)
at android.view.Choreographer.doCallbacks(Choreographer.java:809)
at android.view.Choreographer.doFrame(Choreographer.java:744)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:995)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8512)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Note, nothing is pointing to a particular line in my code.
My code is the following:
private fun setMountain(mChart: LineChart){
val entries = ArrayList<Entry>()
entries.add(Entry(20.9f, 100f))
entries.add(Entry(20.1f, 304f))
entries.add(Entry(19.4f, 609f))
entries.add(Entry(18.6f, 914f))
entries.add(Entry(17.9f, 1219f))
entries.add(Entry(17.3f, 1524f))
entries.add(Entry(16.6f, 1828f))
entries.add(Entry(16f, 2133f))
entries.add(Entry(15.4f, 2438f))
entries.add(Entry(14.8f, 2743f))
entries.add(Entry(14.3f, 3048f))
entries.add(Entry(13.7f, 3352f))
entries.add(Entry(13.2f, 3657f))
entries.add(Entry(12.7f, 3962f))
entries.add(Entry(12.3f, 4267f))
entries.add(Entry(11.8f, 4572f))
entries.add(Entry(11.4f, 4876f))
entries.add(Entry(11f, 5181f))
entries.add(Entry(10.5f, 5486f))
entries.add(Entry(10.1f, 5791f))
entries.add(Entry(9.7f, 6096f))
entries.add(Entry(9.4f, 6400f))
entries.add(Entry(9f, 6705f))
entries.add(Entry(8.7f, 7010f))
entries.add(Entry(8.4f, 7315f))
entries.add(Entry(8.1f, 7620f))
entries.add(Entry(7.8f, 7924f))
entries.add(Entry(7.5f,8229f))
entries.add(Entry(7.2f,8534f))
entries.add(Entry(6.9f,8839f))
entries.add(Entry(6.3f,9144f))
val dataSet = LineDataSet(entries, "label")
mChart.data = LineData(dataSet)
mChart.invalidate()
mChart.xAxis.position = XAxis.XAxisPosition.BOTTOM
}
I have tried to look at the following solutions, MPChart java.lang.NegativeArraySizeException: -54 https://github.com/PhilJay/MPAndroidChart/issues/2403
and it still doesn't work. I'm at a lost. Any help is appreciated. Thanks
EDIT::: Yo no way, things work now. I searched around again and found the following thread: https://github.com/PhilJay/MPAndroidChart/issues/2074#issuecomment-238458565
By adding
Collections.sort(entries, EntryXComparator())
it started working. Beats me because it was already sorted but eh it works now.
Upvotes: 5
Views: 1622
Reputation: 376
The question was edited to include the solution. The solution is to use:
Collections.sort(entries, EntryXComparator())
This is from: https://github.com/PhilJay/MPAndroidChart/issues/2074#issuecomment-238458565
Upvotes: 2