kotlin - 如何将下面的 json 数据解析为 kotlin?
问题描述
大家好,我已经能够将 name/practiceOnDate 属性解析为 kotlin 数据类,但我无法正确解析 exercices 属性,您可以检查屏幕截图以获取我得到的输出。你知道我必须做什么吗?(编辑:我在 recyclerView 中显示数据)
[
{
"name": "Introductory Session",
"practicedOnDate": "2016-05-08T14:48:28.257Z",
"exercises": [
{
"exerciseId": "0",
"name": "Quarters flat minor C",
"practicedAtBpm": 40
},
{
"exerciseId": "1",
"name": "Triplets flat major A",
"practicedAtBpm": 40
},
{
"exerciseId": "2",
"name": "Eigths flat minor A",
"practicedAtBpm": 40
},
{
"exerciseId": "3",
"name": "Eigths sharp minor C",
"practicedAtBpm": 40
}
]
}
这是我的 getSessions 函数:
private fun getSessions() {
val retrofitBuilder = Retrofit.Builder().addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build()
.create(ApiInterface::class.java)
val retrofitData = retrofitBuilder.getData()
retrofitData.enqueue(object : Callback<List<SessionsItem>?> {
override fun onResponse(
call: Call<List<SessionsItem>?>,
response: Response<List<SessionsItem>?>
) {
val responseBody = response.body()!! //NOT NULL
myAdapter = sessionAdapter(baseContext,responseBody)
myAdapter.notifyDataSetChanged()
recyclerview.adapter = myAdapter
}
override fun onFailure(call: Call<List<SessionsItem>?>, t: Throwable) {
d("MainActivity","onFailure"+t.message)
}
})
}
会话适配器:
class sessionAdapter (val context:Context,val sessionList:List<SessionsItem>):RecyclerView.Adapter<sessionAdapter.ViewHolder>(){
class ViewHolder(itemView: View):RecyclerView.ViewHolder(itemView) {
var sessionName:TextView
var practicedOnDate:TextView
var exercises:TextView
init {
sessionName = itemView.sessionName
practicedOnDate = itemView.practicedOnDate
exercises = itemView.exercices
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
var itemView = LayoutInflater.from(context).inflate(R.layout.row_items,parent,false)
return ViewHolder(itemView)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.sessionName.text = sessionList[position].name
holder.practicedOnDate.text = sessionList[position].practicedOnDate
println(sessionList[position].exercises.get(0))
holder.exercises.text =sessionList[position].exercises.toString()
}
override fun getItemCount(): Int {
return sessionList.size
}}
我的会话数据类:
data class SessionsItem(
val exercises: List<Exercise>,
val name: String,
val practicedOnDate: String)
我无法使用的练习数据类:
data class Exercise(
val exerciseId: String,
val name: String,
val practicedAtBpm: Int)
这是我的输出:截图
我只想获取练习的名称和 practicedAtBpm 属性,但我得到了一切
解决方案
在练习数据类中覆盖 toString(),如下所示
data class Exercise(
val exerciseId: String,
val name: String,
val practicedAtBpm: Int){
override fun toString(): String = "name=$name, practicedAtBpm=$practicedAtBpm"
}
推荐阅读
- reactjs - 在 useEffect 中调度使用
- assembly - 除了在 cmp $0 上节省大小之外的测试用途
- javascript - 使用小胡子渲染 [object Promise] 将来自 Axios 承诺的数据渲染成 HTML
- amazon-web-services - 从 ALB 重定向到 S3 的存储桶策略(Webhosting)
- timer - Circular progress bar for a countdown timer publisher SwiftUI
- python - xticks 仅在 bin 刻度上
- javascript - Vuetify CSS for button 在生产构建中以不同的顺序加载,导致问题
- css - 如果其类名与具有固定名称列表的父类名匹配,则显示直接子类
- python - 无法安装 streamlit 库
- javascript - “无法读取未定义的属性‘缓存’”?