Zachattack
Zachattack

Reputation: 51

mpAndroidChart java.lang.NegativeArraySizeException: -46 for Kotlin

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

Answers (1)

InvisibleGorilla
InvisibleGorilla

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

Related Questions