You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中饼图实现求助:尝试代码后未成功

Android 饼图实现完整方案(适配你的数据结构)

嘿,我来帮你搞定Android饼图的问题!看你已经尝试写代码但没成功,结合你给出的JSON数据,我给你一个用MPAndroidChart库实现的完整方案——这个库是Android平台做图表的首选,成熟又好上手。

第一步:添加库依赖

首先得把MPAndroidChart引入你的项目:

  1. 打开项目根目录的settings.gradle,添加JitPack仓库(如果还没加的话):
dependencyResolutionManagement {
    repositories {
        // 保留你已有的google()、mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}
  1. 打开app模块的build.gradle,添加依赖:
dependencies {
    implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}

点击Sync Now同步依赖即可。

第二步:在布局里加饼图组件

在你要显示饼图的Activity/Fragment布局xml中,添加PieChart控件:

<com.github.mikephil.charting.charts.PieChart
    android:id="@+id/pieChart"
    android:layout_width="match_parent"
    android:layout_height="300dp" />

第三步:解析你的JSON数据并配置饼图

先做数据模型(对应你的JSON结构)

先创建几个数据类,方便解析JSON(下面是Kotlin代码,Java写法逻辑一致,语法稍作调整即可):

// 单个分类的目标与收集数据
data class CategoryData(
    val target: Int,
    val collection: Int
)

// 所有分类的集合
data class Records(
    val collection: CategoryData,
    val disconnection: CategoryData,
    val realisation: CategoryData,
    val arrear: CategoryData,
    val sanitisation: CategoryData,
    val enforcement: CategoryData
)

// 完整的API返回数据结构
data class ApiResponse(
    val status: Boolean,
    val authentication: Boolean,
    val message: String,
    val records: Records
)

初始化饼图并绑定数据

假设你已经拿到了API返回的JSON字符串,接下来解析并设置饼图:

val pieChart = findViewById<PieChart>(R.id.pieChart)

// 用Gson解析JSON(需先加Gson依赖:implementation 'com.google.code.gson:gson:2.10.1')
val gson = Gson()
val apiResponse = gson.fromJson(yourJsonString, ApiResponse::class.java)

// 准备饼图的分类标签和对应的数据(这里用collection字段举例,你也可以换成target或计算差值)
val categoryLabels = listOf(
    "Collection", "Disconnection", "Realisation",
    "Arrear", "Sanitisation", "Enforcement"
)
val categoryValues = listOf(
    apiResponse.records.collection.collection.toFloat(),
    apiResponse.records.disconnection.collection.toFloat(),
    apiResponse.records.realisation.collection.toFloat(),
    apiResponse.records.arrear.collection.toFloat(),
    apiResponse.records.sanitisation.collection.toFloat(),
    apiResponse.records.enforcement.collection.toFloat()
)

// 生成饼图条目(过滤数值为0的分类,避免饼图空白或显示异常)
val pieEntries = mutableListOf<PieEntry>()
categoryLabels.forEachIndexed { index, label ->
    val value = categoryValues[index]
    if (value > 0) {
        pieEntries.add(PieEntry(value, label))
    }
}

// 配置饼图数据集
val pieDataSet = PieDataSet(pieEntries, "Task Statistics")
// 给每个分类设置自定义颜色
pieDataSet.colors = listOf(
    Color.parseColor("#FF6384"), Color.parseColor("#36A2EB"),
    Color.parseColor("#FFCE56"), Color.parseColor("#4BC0C0"),
    Color.parseColor("#9966FF"), Color.parseColor("#FF9F40")
)
// 设置数值标签样式
pieDataSet.valueTextColor = Color.BLACK
pieDataSet.valueTextSize = 12f

// 绑定数据到饼图
val pieData = PieData(pieDataSet)
pieChart.data = pieData

// 优化显示效果
pieChart.description.isEnabled = false // 关闭默认底部描述
pieChart.legend.isEnabled = true // 显示分类图例
pieChart.setUsePercentValues(true) // 显示百分比替代原始数值
pieChart.animateY(1000) // 添加底部弹出动画

// 刷新饼图
pieChart.invalidate()

几个关键注意点

  • 你提供的测试数据里所有collection和target都是0,这种情况饼图会显示空白,等有真实业务数据就会正常展示啦。
  • 如果用Java开发,只需把Kotlin语法转换成Java写法(比如用ArrayList替代mutableListOf,用new关键字创建对象等)。
  • 若遇到依赖同步失败,检查settings.gradle里的JitPack仓库是否添加正确。

内容的提问来源于stack exchange,提问作者Payal Kumari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:15:07