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

如何将给定JSON解析为Kotlin对象并正确获取嵌套练习字段展示到RecyclerView

问题原因

你的JSON解析逻辑完全正常,exercises属性已经正确解析为Exercise对象列表,当前看到的全量输出是因为直接调用了列表的默认toString()方法,会按默认规则序列化所有字段。

解决方法

方法1:在Adapter中直接拼接所需字段(更灵活,推荐)

修改sessionAdapter的onBindViewHolder方法,遍历练习列表拼接你需要的name和practicedAtBpm字段即可:

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val currentItem = sessionList[position]
    holder.sessionName.text = currentItem.name
    holder.practicedOnDate.text = currentItem.practicedOnDate
    // 按自定义格式拼接练习内容,每行显示一个练习
    val exerciseContent = currentItem.exercises.joinToString(separator = "\n") { exercise ->
        "${exercise.name}(BPM:${exercise.practicedAtBpm})"
    }
    holder.exercises.text = exerciseContent
}

你可以自行调整joinToString的分隔符、前缀、后缀来匹配你要的展示效果。

方法2:重写Exercise类的toString方法

如果要统一Exercise的默认输出格式,可以重写toString方法:

data class Exercise(
    val exerciseId: String,
    val name: String,
    val practicedAtBpm: Int
) {
    override fun toString(): String {
        return "$name(BPM:$practicedAtBpm)"
    }
}

重写后你原来的sessionList[position].exercises.toString()代码就会输出你要的格式。

注意事项

你当前ViewHolder的初始化代码中,绑定练习展示控件的id是itemView.exercices,拼写存在错误(正确拼写应为exercises),如果后续出现空指针异常可以优先检查布局文件的对应id拼写是否一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:42:00