График с использованием mpAndroid Chart xAxis не отображает дату, которую я отформатировал - PullRequest
1 голос
/ 01 апреля 2019

У меня есть код для отображения данных в линейном графике, и мне нужно изменить xAxis на дату, но в журнале есть ошибка

java.lang.NumberFormatException: For input string: "2019-04-19 00:00:00" 

Ниже приведен мой фрагмент кодадля линейного графика

mLineChart = findViewById(R.id.chart)

    importData()

    val dataSet = LineDataSet(entries, "Water")
    val lineData = LineData(dataSet)
    mLineChart.axisRight.isEnabled = false
    mLineChart.data = lineData
    dataSet.color = Color.RED
    dataSet.setDrawCircles(false)
    dataSet.setDrawValues(false)
    dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
    mLineChart.description.text = ""
    mLineChart.legend.isEnabled = false
    mLineChart.invalidate()


    val leftAxis = mLineChart.axisLeft
    leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART)
    leftAxis.axisMinimum = 0f
    leftAxis.axisMaximum = 30f


    val rightAxis = mLineChart.axisRight
    rightAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART)
    rightAxis.axisMinimum = 0f
    rightAxis.axisMaximum = 30f

    var xAxis = mLineChart.xAxis
    xAxis.position = XAxis.XAxisPosition.BOTTOM
    xAxis.setDrawGridLines(false)
    xAxis.axisMinimum = 0f
    xAxis.labelCount = 5
    xAxis.axisMaximum = 400f
    xAxis.granularity = 1f
    xAxis.isGranularityEnabled = true
    xAxis.valueFormatter = DateAxisValueFormatter(null)

Ниже приведен мой фрагмент кода для вставки данных

private fun importData() {

                for (data in dataList) {
                    val date = java.lang.Float.parseFloat(data.date)
                    val water = java.lang.Float.parseFloat(data.water)

                    entries.add(Entry(date, water))
                }

Ниже приведен мой фрагмент кода для средства форматирования значений

    internal inner class DateAxisValueFormatter(private val mValues: Array<String>?) : ValueFormatter(),
    IAxisValueFormatter {

    var sdf = SimpleDateFormat("hh:mm", Locale.ENGLISH)

    override fun getFormattedValue(value: Float, axis: AxisBase?): String {
        return sdf.format(Date(value.toLong()))
    }
}

1 Ответ

0 голосов
/ 01 апреля 2019

Ваше исключение очевидно, вы пытаетесь преобразовать строку в число с плавающей точкой, но эта строка не является числом.

Если вы хотите отобразить дату, вы должны отформатировать ее в миллисекундах до,Попробуйте что-то вроде этого:

private fun importData() {
val dateFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)

                for (data in dataList) {
                    val date = dateFormatter.parse(data.date)
                    val water = java.lang.Float.parseFloat(data.water)

               //Here you get your date as a Long and you convert it in Float
                    entries.add(Entry(date.time.toFloat(), water))
                }

РЕДАКТИРОВАТЬ: В вашей xAxis установите свой собственный valueFormatter таким образом, чтобы преобразовать ваш float обратно в дату:

  val x = chart.xAxis
    x.setValueFormatter { value, _ ->
        SimpleDateFormat("HH:mm:ss", Locale.ENGLISH).format(value.toLong())
    }
...