尝试在BarEntry数组上添加值时出错

问题描述:

我有一个小问题MPAndroidChart。在上面的代码中,我得到一个错误,让我生气3天。 当我尝试添加一个条目到barEntry数组时,我得到一个错误,我不知道为什么。尝试在BarEntry数组上添加值时出错

private void retrive(){ 
    NoSQL.with(this).using(Float.class) 
      .bucketId("MyMarket") 
      .entityId("Chart") 
      .retrieve(new RetrievalCallback<Float>() { 
       @Override 
       public void retrievedResults(List<NoSQLEntity<Float>> noSQLEntities) { 
        for(int i = 0; i < noSQLEntities.size(); i++) { 
         float item = noSQLEntities.get(i).getData(); 
         BarEntry entry = new BarEntry(i, item); 
         barEntries.add(entry); 

        } 
       } 
      }); 

    BarDataSet barDataSet = new BarDataSet(barEntries, "Compras"); 

    BarData theData = new BarData(barDataSet); 
    theData.setBarWidth(0.9f); 
    barChart.setData(theData); 

    barChart.setTouchEnabled(true); 
    barChart.setDragEnabled(true); 
    barChart.setScaleEnabled(true); 
    barChart.setDescription(""); 
    barChart.animateY(2700); 
    barChart.setData(theData); 
    barChart.setFitBars(true); 

    XAxis xAxis = barChart.getXAxis(); 
    xAxis.setDrawGridLines(false); 

    YAxis right = barChart.getAxisRight(); 
    right.setDrawGridLines(false); 

    YAxis left = barChart.getAxisLeft(); 
    left.setDrawGridLines(false); 

    barChart.invalidate(); 
} 

在这一行:

BarEntry entry = new BarEntry(i, item); 

我有一定的增加值,但该程序保持给我这个错误:

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.stark.mymarket, PID: 6404 
       java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
        at com.github.mikephil.charting.buffer.BarBuffer.addBar(BarBuffer.java:37) 
        at com.github.mikephil.charting.buffer.BarBuffer.feed(BarBuffer.java:80) 
        at com.github.mikephil.charting.renderer.BarChartRenderer.drawDataSet(BarChartRenderer.java:103) 
        at com.github.mikephil.charting.renderer.BarChartRenderer.drawData(BarChartRenderer.java:78) 
        at com.github.mikephil.charting.charts.BarLineChartBase.onDraw(BarLineChartBase.java:243) 
        at android.view.View.draw(View.java:16178) 
        at android.view.View.updateDisplayListIfDirty(View.java:15174) 
        at android.view.View.draw(View.java:15948) 
        at android.view.ViewGroup.drawChild(ViewGroup.java:3609) 
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 
        at android.view.View.updateDisplayListIfDirty(View.java:15169) 
        at android.view.View.draw(View.java:15948) 
        at android.view.ViewGroup.drawChild(ViewGroup.java:3609) 
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 
        at android.view.View.updateDisplayListIfDirty(View.java:15169) 
        at android.view.View.draw(View.java:15948) 
        at android.view.ViewGroup.drawChild(ViewGroup.java:3609) 
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 
        at android.view.View.updateDisplayListIfDirty(View.java:15169) 
        at android.view.View.draw(View.java:15948) 
        at android.view.ViewGroup.drawChild(ViewGroup.java:3609) 
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 
        at android.view.View.updateDisplayListIfDirty(View.java:15169) 
        at android.view.View.draw(View.java:15948) 
        at android.view.ViewGroup.drawChild(ViewGroup.java:3609) 
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 
        at android.view.View.updateDisplayListIfDirty(View.java:15169) 
        at android.view.View.draw(View.java:15948) 
        at android.view.ViewGroup.drawChild(ViewGroup.java:3609) 
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 
        at android.view.View.draw(View.java:16181) 
        at com.android.internal.policy.PhoneWindow$DecorView.draw(PhoneWindow.java:2690) 
        at android.view.View.updateDisplayListIfDirty(View.java:15174) 
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:281) 
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:287) 
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:322) 
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:2615) 
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2434) 
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2067) 
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
        at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
        at android.view.Choreographer.doFrame(Choreographer.java:606) 
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

确保您没有使用MPAndroidChart的测试版。每个http://*.com/questions/39736352/mpandroidchart-y-axis-scale-gets-updated-but-lines-are-not/39813637#39813637,可能有错误 – Alex

你应该看看你的控制台日志。着眼于行,它给你说,你做了什么样的错误:

java.lang.ArrayIndexOutOfBoundsException: length=0; index=0

这意味着您试图访问到您的列表,noSQLEntities的错误位置。

你得到该线路上的错误:

BarEntry entry = new BarEntry(i, item); 

,但我几乎可以安全,你的错误实在是对这个其他线路(这是上面使用就行了):

float item = noSQLEntities.get(i).getData(); 

看来您并未使用值初始化您的noSQLEntities列表,因此您试图访问该列表中不存在的位置。

确保您的noSQLEntities列表具有值。您可以使用debug mode(如果您使用Android Studio)或logs在控制台中查看您的noSQLEntities列表的值。