问题描述
我正在尝试使用 MpAndroidChart 库创建一个包含两个不同 LineDataSet 的 LineChart,但我仍然收到此错误,我不知道为什么:java.lang.NegativeArraySizeException: -2 我从后端获取我的数据,我正在使用 LiveData。我找到了关于这个主题的一些主题,那里提到的解决方案是按 X 值对 dataVals 进行排序。但就我而言,我的 X 值已经排序(从 0 到 2)。
我的观察者和 onViewCreated 方法:
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
theme = PreferenceManager.getDefaultSharedPreferences(context).getString("THEME","defaultStringIfnothingFound")!!;
mClusterGuid = PreferenceManager.getDefaultSharedPreferences(context).getString("GUID","defaultStringIfnothingFound")!!;
dataTypeSelected = PreferenceManager.getDefaultSharedPreferences(context).getString("DataType","defaultStringIfnothingFound")!!;
role = PreferenceManager.getDefaultSharedPreferences(context).getString("Role","defaultStringIfnothingFound")!!
lineChart = line_chart
chartsviewmodel.getCashCollectionData(mClusterGuid)
chartsviewmodel.getFinancialDetails(mClusterGuid)
cashCollectionObserver()
financialDetailsObserver()
setLineChartData()
}
private fun cashCollectionObserver() {
chartsviewmodel.cashCollection.observe(viewLifecycleOwner,androidx.lifecycle.Observer {
if (it.isNotEmpty()) {
setCashValues(it)
}
})
}
private fun financialDetailsObserver() {
chartsviewmodel.financialDetails.observe(viewLifecycleOwner,androidx.lifecycle.Observer {
if (it.isNotEmpty()) {
setFinancialValues(it)
}
})
}
我的 setCashValues 和 setFinancialValues 方法
private fun setCashValues(cashList: MutableList<CashCollection.CashCollectionItem>) {
val dataValsEntries: ArrayList<Entry> = ArrayList()
val dateArrayList: ArrayList<String> = ArrayList()
val reverseCashList: MutableList<CashCollection.CashCollectionItem> = ArrayList()
val dataValsArray: ArrayList<Float> = ArrayList()
var i = 1F
var j = 1F
if (cashList.isNullOrEmpty()) {
Toast.makeText(context,"Cash Collection: No data available",Toast.LENGTH_SHORT).show()
} else {
val listIterator = cashList.listIterator()
while ( listIterator.hasNext()) listIterator.next()
while(listIterator.hasPrevIoUs()) reverseCashList.add(listIterator.prevIoUs())
for (item in reverseCashList) {
if (i <= 2) {
val value: String = item.value!!.replaceFirst(",",".")
// val date: String = item.label!!.replace(".2020","")
if (value.toFloat() != 0F) {
dataValsEntries.add(Entry(i,value.toFloat()))
// dateArrayList.add(date)
i++
}
}
}
var lineDataSet1 = LineDataSet(dataValsEntries,"Cash Collection")
lineDataSet1.setCircleColor(getChartsColors()[0])
lineDataSet1.circleSize = 5f
lineDataSet1.linewidth = 2f
lineDataSet1.fillAlpha = 1
lineDataSet1.setDrawFilled(true)
lineDataSet1.fillColor = getChartsColors()[0]
dataSets.add(lineDataSet1)
}
}
private fun setFinancialValues(financialList: MutableList<FinancialDetails.FinancialDetailsItem>) {
val dataValsEntries: ArrayList<Entry> = ArrayList()
val dateArrayList: ArrayList<String> = ArrayList()
val reverseFinancialList: MutableList<FinancialDetails.FinancialDetailsItem> = ArrayList()
val dataValsArray: ArrayList<Float> = ArrayList()
var i = 0F
var j = 0F
if (financialList.isNullOrEmpty()) {
Toast.makeText(context,Toast.LENGTH_SHORT).show()
} else {
val listIterator = financialList.listIterator()
while ( listIterator.hasNext()) listIterator.next()
while(listIterator.hasPrevIoUs()) reverseFinancialList.add(listIterator.prevIoUs())
for (item in reverseFinancialList) {
if (i <= 2) {
val value: String = item.value!!.replaceFirst(",".")
// val date: String = item.label!!.replace(".2020",value.toFloat()))
// dateArrayList.add(date)
i++
}
}
}
var lineDataSet2 = LineDataSet(dataValsEntries,"Financial Details")
lineDataSet2.setCircleColor(getChartsColors()[1])
lineDataSet2.circleSize = 5f
lineDataSet2.linewidth = 2f
lineDataSet2.fillAlpha = 1
lineDataSet2.setDrawFilled(true)
lineDataSet2.fillColor = getChartsColors()[1]
dataSets.add(lineDataSet2)
}
}
我的 setChartData 方法:
private fun setLineChartData() {
val barLabesArrayList: ArrayList<String> = ArrayList()
val data = LineData(dataSets as List<ILineDataSet>?)
data.setValueTextSize(10f)
line_chart.data = data
line_chart.description.isEnabled = false
val xAxis = line_chart.xAxis
val yAxisRight = line_chart.axisRight
val yAxisLeft = line_chart.axisLeft
yAxisRight.isEnabled = false
yAxisLeft.isEnabled = true
yAxisLeft.setDrawLabels(false)
yAxisLeft.setDrawGridLines(true)
xAxis.position = XAxis.XAxisPosition.BottOM
xAxis.isEnabled = true
/* line_chart.xAxis.valueFormatter = IndexAxisValueFormatter(barLabesArrayList)
line_chart.xAxis.mAxisRange = barLabesArrayList.size.toFloat()*/
//line_chart.xAxis.labelCount = 3
line_chart.isClickable = false
line_chart.isHighlightPerTapEnabled = false
line_chart.onTouchListener = null
line_chart.legend.isEnabled = true
line_chart.animateY(2000)
line_chart.invalidate()
}
任何建议都会有很大帮助!谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)