Android应用功能扩展:基于现有零件查找可建造的其他机器
Android应用扩展功能技术实现建议
数据层梳理与本地缓存
- 从外部API拉取机器数据时,务必获取每台机器的完整零件需求明细(含机器ID、名称、对应零件ID及所需数量),同时把用户已存零件(ID、库存数量)持久化到本地数据库,推荐用Room,Android生态适配性好。
- 数据建模时要明确关联关系:机器实体加
requiredParts字段(存零件ID-所需数量的键值对),零件实体加stockQuantity字段记录库存数。
核心计算逻辑
这是功能的核心,分两个核心场景处理:
单台机器建造完成百分比计算
- 遍历该机器的所有需求零件,逐个匹配本地库存:
- 对每个零件,计算库存数量占需求数量的比例(比如需5个、存3个,比例为60%)
- 取所有零件比例中的最小值,就是这台机器的可建造完成百分比——毕竟最缺的零件会卡住整个建造进度
- 伪代码示例(Kotlin):
fun calculateBuildPercentage(machine: Machine, localParts: List<Part>): Float { var minRatio = 1.0f machine.requiredParts.forEach { (partId, requiredQty) -> val localPart = localParts.find { it.id == partId } val availableQty = localPart?.stockQuantity ?: 0 val ratio = if (requiredQty > 0) availableQty.toFloat() / requiredQty else 1.0f if (ratio < minRatio) minRatio = ratio } return minRatio * 100 }
可建造机器筛选
- 遍历所有机器,调用上面的百分比计算方法,筛选出百分比>0的机器,按百分比从高到低排序,让用户优先看到接近完成的机器。
- 若需区分“可完全建造”(100%)和“部分建造”,筛选后再分组展示即可。
UI展示优化
- 机器列表条目里,显示机器名称、百分比进度条、缺失零件提示(比如“缺2个螺丝”),直观传达信息。
- 加筛选按钮,支持用户切换查看“可完全建造”“部分建造”的机器列表。
- 点击机器条目跳转详情页,展示每个零件的库存/需求对比,清晰标注哪些足够、哪些不足。
性能与更新策略
- 当用户修改本地零件库存,或API拉取到新机器数据时,用LiveData/Flow监听数据变化,自动触发计算并刷新UI。
- 如果机器、零件数量较多,把计算逻辑放到后台线程执行(比如用Coroutines),避免卡主线程。
- API同步不用每次全量拉取,可根据接口返回的更新时间戳做增量同步,减少网络开销。
边界情况处理
- 若API返回的机器无零件需求,直接标记为100%可建造。
- 本地没有对应零件时,该零件比例记为0,机器百分比为0。
- 处理零件需求数量为0的情况,避免出现除以0的异常(伪代码已做判断)。
内容的提问来源于stack exchange,提问作者trcon
相关产品推荐
相关产品推荐

