android - Android Kotlin - JSON 对象的总和
问题描述
我有两个使用外键/字段连接的 JSON 文件(在我的情况下,一个是 Post(id,...)和 Comments(postId,...))。我需要显示每个帖子的评论总数(在我的情况下它总是 5)。
我的数据类如下:
data class Posts(val userId: Int,
val id: Int,
val title: String,
val body: String)
data class Comments(val postId: Int,
val id: Int,
val name: String,
val email: String,
val body: String)
这是我用来获取 json 数据的函数(我使用 okhttp 设置客户端,使用 gson 获取数据):
private fun fetchCommentJson() {
val postId = intent.getIntExtra(POST_ID, -1)
val commentJsonData = commentsJSON
val client = OkHttpClient()
val request = Request.Builder().url(commentJsonData).build()
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call?, e: IOException?) {
toast("Something went wrong fetching your data")
}
override fun onResponse(call: Call?, response: Response?) {
val body = response?.body()?.string()
val gson = GsonBuilder().create()
val commentsDetail = gson.fromJson(body, Array<Comments>::class.java)
val postDetail = gson.fromJson(body, Array<Posts>::class.java)
runOnUiThread {
for (commentSizeList in 0 until commentsDetail.size) {
val listOfComments = commentsDetail[commentSizeList] // List of all comments by Index
val post = postDetail[postId - 1].id // Post Id
// If postId is equal to original post id
if (listOfComments.postId == post) {
// Print it out
println(listOfComments)
}
}
}
}
})
}
当我打印出列表时,它确实会根据它的 ID 打印出每个特定帖子的所有评论(因为它已经完成了比较)。但是,它会分别打印出每条评论(并且设置 listOfComments.size 会为每条评论打印出 1)。
我的问题是如何将它们全部结合起来,以便显示每个帖子的评论总数(在这种情况下 - > 5)?
解决方案
如果我正确理解您的需求,您可以使用以下代码替换整个 for 循环filter
:
// Post Id, the way you've been calculating it
val post = postDetail[postId - 1].id
// a list of comments only containing the ones that have the ID you need
val filteredComments: List<Comments> = commentsDetail.filter { it.postId == post }
从这里,您可以打印整个列表:
println(filteredComments)
或列表的大小:
println(filteredComments.size)
推荐阅读
- asynchronous - 如何模拟由同一文件中的另一个函数调用的函数?
- python - 编码马尔可夫决策过程的问题
- javascript - JSX 如何与 HTML 文件交互?
- python - SQLAlchemy 插入 executemany 函数
- c++ - 使用名称调用传递参数
- chatbot - 在 Botium box 社区版设置中出现错误
- selenium - java和python之间的selenium绑定是否有交叉引用?
- parquet - Vertica - 导出到 Parquet 的最佳做法是什么
- laravel - 经典编辑器不起作用
- postgresql - org.postgresql.util.PGobject 在 org.postgresql 中不可用