当前位置: 首页 > 知识库问答 >
问题:

使用mpAndroid图表xAxis的图形未显示我格式化的日期

吴涵育
2023-03-14

我有一个代码可以在折线图中显示数据,我需要将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个答案

汝昀
2023-03-14

异常很明显,您试图将字符串转换为浮点,但该字符串不是数字。

如果您想显示日期,您必须在之前以毫秒为单位格式化日期。试试这样的方法:

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中设置您自己的值,这样可以将您的浮点数转换回日期:

  val x = chart.xAxis
    x.setValueFormatter { value, _ ->
        SimpleDateFormat("HH:mm:ss", Locale.ENGLISH).format(value.toLong())
    }
 类似资料:
  • 我正在使用MPAndroid库在我的Android应用程序中显示一个简单的条形图。条形图有时会完美地显示数据。但是,有时,尽管DataSet有数据,但它会显示消息“没有可用的图表数据”。 图表仅在我点击图表区域时显示。我谷歌了一下,但找不到解决方案。以下是代码: 任何帮助都将不胜感激。

  • 我的条形图中的条形图未与标签对齐-请参阅:https://imgur.com/gallery/QVtIvXq 我的X轴: 任何帮助都将不胜感激

  • 我的线条怎样才能整齐又不太侧身?

  • 我正在尝试使用MPAndroid图表来显示2组数据。没有语法错误或崩溃,但没有显示任何数据。这是我的代码。 每次我运行时页面都会崩溃。日志显示,“一个或多个DataSet Entry数组比此ChartData对象的x值数组长。”我记录了我的x轴值并检查了,两个数组的大小都是一样的!

  • 我正在尝试创建一个LineChartView,其中包含表示当前季度费用的值。我需要使用xAxis的自定义标签数量打印月份和日期。不幸的是,LineChart生成的一组条目不适合我的需求,我无法更改它们。我需要在我的自定义位置的网格线,即每月的第一天和每月的一组日子,我希望它们在特定位置,而不是LineChart想要的位置。我检查了代码,发现xAxis的条目值是以XAxisRenderer.comp

  • 我是MPAndroidChart的新手,我想在LineChart的XAxis上实时显示时间。我只想显示传入数据的最后10秒,如下图所示。我的采样频率为25Hz,因此我需要显示250个值才能记录10秒。 但是,我真的不知道该怎么做。我想我必须使用IAxisValueFormatter。 目前,我的传入值被添加到数据集,如下所示: 但也许我需要这样做: 然后创建一个格式化程序,将X值转换为类似“xxx