MPAndroidChart Stacked BarChart Custom Markerview Исключение Nullpointer

У меня возникла проблема с примером пользовательского маркера, который я точно воспроизвел и установил его на своей столбчатой ​​диаграмме с накоплением, но когда я нажимаю на него, я получаю исключение.

Код точно такой же, как в example.

Исключение, которое я получаю, выглядит так:

12-22 15:28:54.052 12901-12901/? E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.myapp.myapp, PID: 12901
                                               java.lang.NullPointerException: Attempt to read from field 'float com.github.mikephil.charting.highlight.Range.to' on a null object reference
                                                   at com.github.mikephil.charting.charts.BarLineChartBase.getMarkerPosition(BarLineChartBase.java:571)
                                                   at com.github.mikephil.charting.charts.Chart.drawMarkers(Chart.java:598)
                                                   at com.github.mikephil.charting.charts.BarLineChartBase.onDraw(BarLineChartBase.java:252)
                                                   at android.view.View.draw(View.java:15114)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14048)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                   at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14043)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                   at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                   at android.view.View.draw(View.java:15117)
                                                   at android.support.v4.view.ViewPager.draw(ViewPager.java:2262)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14048)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                   at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14043)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                   at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14043)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                   at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14043)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                   at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                   at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:1229)
                                                   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14043)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                   at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                   at android.support.design.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1077)
                                                   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14043)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                   at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14043)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                   at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14043)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                   at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14043)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                   at android.view.ViewGroup.drawChild(ViewGroup.java:3404)
                                                   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                                                   at android.view.View.updateDisplayListIfDirty(View.java:14043)
                                                   at android.view.View.getDisplayList(View.java:14071)
                                                   at android.view.View.draw(View.java:14838)
                                                at android.view.

У кого-нибудь есть идеи?

ИЗМЕНИТЬ

Итак, это onValueSelected(..).

    @Override
    public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
        barChart.highlightValue(e.getXIndex(), dataSetIndex);
    }

person Karl-John Chow    schedule 22.12.2015    source источник
comment
Опубликуйте свой Java-код клика.   -  person Beena    schedule 22.12.2015
comment
Я разместил onValueSelected(..) @Beena   -  person Karl-John Chow    schedule 22.12.2015
comment
вы не инициализировали объект barChart   -  person Nishant.    schedule 22.12.2015
comment
@Radix Вся диаграмма работает уже какое-то время, но просто ломается в момент выбора. Я использовал setDrawHighLightArrow();, и он тоже работает, но мне нужна моя собственная стрелка.   -  person Karl-John Chow    schedule 22.12.2015
comment
Полная трассировка стека будет полезна для отладки вашей проблемы. На данный момент единственное, что мы знаем, это ошибка NPE.   -  person Nishant.    schedule 22.12.2015


Ответы (1)


В любом случае было бы неплохо проверить, равно ли Entry нулю, как это показано в примере Stacked BarChart.

Это код из примера:

@Override
public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {

    BarEntry entry = (BarEntry) e;

    if (entry.getVals() != null)
        Log.i("VAL SELECTED", "Value: " + entry.getVals()[h.getStackIndex()]);
    else
        Log.i("VAL SELECTED", "Value: " + entry.getVal());
}
person Denis Duh    schedule 22.12.2015