2015-12-22 95 views
0

我有一個問題,我準確複製的自定義標記示例,並將其設置在我的堆疊條形圖上,但是當我點擊它時,我得到一個異常。MPAndroidChart堆棧BarChart自定義Markerview空指針異常

該代碼與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); 
    } 
+0

安置自己的Java代碼。 – Beena

+0

我發佈了'onValueSelected(..)'@Beena –

+0

你沒有初始化barChart對象 –

回答

1

這將是很好的反正檢查是否Entry等於零,因爲它是在層疊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()); 
}