如何将给定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
相关产品推荐
相关产品推荐

