У меня есть гистограмма, которая была создана с использованием приведенного ниже кода:
val myStackLabels = arrayOfNulls<String>(endMonth)
val values = java.util.ArrayList<BarEntry>()
for (i in activityList.indices){
myStackLabels[i] = HelperFunctions.getMonthName(activityList.get(i).actionMonth,2)
values.add(
BarEntry(
i.toFloat(), activityList.get(i).totalBehaviorPoints.toFloat()
)
)
}
val dataSet = BarDataSet(values, "")
val colors = java.util.ArrayList<Int>()
colors.add(Color.parseColor("#C5C4C4"))
dataSet.colors = colors
dataSet.setDrawIcons(true)
dataSet.highLightColor = Color.parseColor("#3f51b5")
val xAxis: XAxis = myChart!!.getXAxis()
xAxis.setDrawGridLines(false)
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM)
xAxis.setValueFormatter(IndexAxisValueFormatter(myStackLabels))
xAxis.setGranularity(1f)
xAxis.setGranularityEnabled(true)
xAxis.setDrawAxisLine(false)
xAxis.textColor = Color.BLACK
xAxis.labelCount = endMonth
xAxis.setDrawLabels(true)
val leftAxis: YAxis = myChart!!.getAxisLeft()
leftAxis.setDrawGridLines(true)
leftAxis.setLabelCount(endMonth, true)
leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART)
leftAxis.spaceTop = 15f
leftAxis.axisMinimum = 0f // this replaces setStartAtZero(true)
leftAxis.setDrawAxisLine(true)
val rightAxis: YAxis = myChart!!.getAxisRight()
rightAxis.setDrawGridLines(false)
rightAxis.setLabelCount(endMonth, false)
rightAxis.spaceTop = 15f
rightAxis.axisMinimum = 0f // this replaces setStartAtZero(true)
rightAxis.setDrawAxisLine(false)
rightAxis.isEnabled = false
val dataSets = java.util.ArrayList<IBarDataSet>()
dataSets.add(dataSet)
val data = BarData(dataSets)
data.setValueFormatter(StackedValueFormatter(false, " points", 0));
data.setValueTextColor(Color.BLACK);
data.setDrawValues(true)
val myHighlight = Highlight(1f, 0,0);
myChart.highlightValue(myHighlight)
myChart.animateY(1500)
myChart.setDrawValueAboveBar(true)
myChart.setScaleEnabled(false)
myChart.setPinchZoom(false)
myChart.setData(data);
myChart.setFitBars(true); // make the x-axis fit exactly all bars
myChart.invalidate(); // refresh
В основном приведенный выше код будет генерировать очень базовую гистограмму c. Я хочу автоматически выделить одну из полосовых линий, скажем, 2-ю полосу, следовательно, приведенный выше код myHighlight = Highlight(1f, 0,0)
.
Но запуск программы всегда будет возвращать java.lang.NullPointerException: Attempt to invoke virtual method 'com.github.mikephil.charting.data.Entry com.github.mikephil.charting.data.ChartData.getEntryForHighlight(com.github.mikephil.charting.highlight.Highlight)' on a null object reference
at com.github.mikephil.charting.charts.Chart.highlightValue(Chart.java:631)
, который указывает на строку myChart.highlightValue(myHighlight)