2016-09-30 6 views
2

У меня есть небольшая проблема с MPAndroidChart. В приведенном выше коде я получаю ошибку, которая заставляет меня сходить с ума на 3 дня. Im получение ошибки, когда я пытаюсь добавить запись в массив barEntry, и я не знаю почему.Ошибка при попытке добавить значение в Array of 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://stackoverflow.com/questions/39736352/mpandroidchart-y-axis-scale-gets-updated-but-lines-are-not/39813637#39813637 могут быть ошибки – Alex

ответ

1

Вы должны смотреть на свой лог консоли. Ориентируясь на линии, в которой он говорит вам, какие ошибки вы получаете:

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 в консоли.