安卓 多次异步请求数据后使用 MPAndroidChart 绘图问题

问题重现:

       

        

        可以看见 MPAndroidChart 直接罢工了

        代码如下:

 

val data1 = ArrayList<GetData1>()

   ...

private fun getNewsData(id: Int) {
    NetWorkCreator.getData1(id.toString()).enqueue(object :Callback<GetData1>{
        override fun onResponse(call: Call<GetData1>, response: Response<GetData1>) {

            val body = response.body()
            if (body!= null){
                data1.add(body)
                setBarChart()
            }

        }

        override fun onFailure(call: Call<GetData1>, t: Throwable) {
            Log.d("DataFragment",t.stackTraceToString())
        }
    })
}

private fun setBarChart() {
    
    //设置无数据提示
    binding.BarChart.setNoDataTextColor(Color.parseColor("#003B4C"))
    binding.BarChart.setNoDataText("暂无数据~")
    //添加数据
    val entries = ArrayList<BarEntry>()
    for (x in 0 until data1.size){
        entries.add(BarEntry(x.toFloat(),data1[x].total.toFloat()))
    }
   
    val xAxis = binding.BarChart.xAxis
    xAxis.position = XAxis.XAxisPosition.BOTTOM;
    xAxis.valueFormatter = IndexAxisValueFormatter(listOf("50","51","52","53"))
    xAxis.setDrawGridLines(false)
    xAxis.granularity = 1f
    //数据添加到数据集
    val dataSet =  BarDataSet(entries,"")
    //柱体颜色
    dataSet.color = Color.parseColor("#FF6363")
    //数据集赋值给数据对象
    val data = BarData(dataSet)
    data.barWidth = 0.2f;


    binding.BarChart.axisRight.isEnabled = false

    binding.BarChart.data = data

    val description = binding.BarChart.description
    description.text = "评论人数"

    binding.BarChart.description = description

}

        可以看见原本想的是每次获取数据后都绘制一次就可以了,但这样它一次都不画

解决过程:

        思考了两种方案

                1.使用线程等待,将异步线程在得到数据后等待,在所有线程都得到数据后一起绘制

                2.现在主页面中获取对应数据后发给它(本文的柱状图是绘制在fragment中的)

        实际执行下来两种方案都不行,于是掏出九阳神功 -- 查文章 和 翻源码

解决方案:

        最后瞥见一个clear方法,想是否是因为每次绘制完没清空,这个框架不会自动覆盖以前的。

        那么解决方案就是在图绘制之前添加一个clear方法

        

binding.BarChart.clear()// 清空
//设置无数据提示
binding.BarChart.setNoDataTextColor(Color.parseColor("#003B4C"))
binding.BarChart.setNoDataText("暂无数据~")
最终效果:

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值