android - 在 Kotlin 中对 json 中的数据进行排序
问题描述
我有来自 json 文件的数据,这些数据显示在我的应用程序的 recyclerview 中。我正在尝试按year对这些数据进行排序。这就是我的代码的样子:
在 MainActivity.kt 中发生的一切都在 fetchJson() 函数中
private fun fetchJson(jsonUrl: String) {
Log.d(TAG, "Attempting to fetch json")
val request = okhttp3.Request.Builder().url(jsonUrl).build()
val client = OkHttpClient()
client.newCall(request).enqueue(object: Callback {
override fun onFailure(call: Call, e: IOException) {
Log.d(TAG, "Failed to execute request")
}
override fun onResponse(call: Call, response: Response) {
val body = response.body()?.string()
Log.d(TAG, "$body")
val gson = GsonBuilder().create()
val homeFeed = gson.fromJson(body, HomeFeed::class.java)
homeFeed.standups.sortedWith(compareBy({it.year}))
runOnUiThread {
rv.adapter = Adapter(homeFeed)
}
}
})
}
fun <T> compareBy(vararg selectors: (T) -> Comparable<*>?): Comparator<T> {
return Comparator<T> { a, b -> compareValuesBy(a, b, *selectors) }
}
HomeFeed 课程在这里:
class HomeFeed(val standups: List<StandUps>)
和数据类 StandUps:
data class StandUps(
val artist: String,
val title: String,
val year: String,
val poster: String,
val description: String,
val netflix_link: String,
val imdb_rate: String,
val imdb_link: String,
val duration_min: String
)
它不显示任何错误或警告,它只是不做任何事情。我怎么能做到这一点?
解决方案
您必须首先将排序列表存储在另一个变量中,然后使用该变量将其传递给您的adapter
val homeFeed = gson.fromJson(body, HomeFeed::class.java)
val sortedHomeFeed = homeFeed.standups.sortedWith(compareBy({it.year}))
runOnUiThread {
rv.adapter = Adapter(sortedHomeFeed)
}
这样做的原因是,没有按照不变性的概念对原始列表进行更改。
推荐阅读
- javascript - 单击按钮时值未更新
- scala - 根据列表的匹配值将常见行过滤到 Spark DataFrame 中
- c# - ef core include 总是创建左连接
- python - 基于另一列将数据从行移动到列
- message-queue - 在 VMS 平台上运行的 BEA 消息队列 - 登录、跟踪
- linux - 即使超过软限制,配额也不会报告任何警告。只报告硬限制的警告
- javascript - 仅在从后端获取数据后如何在 useEffect 中调用函数?
- python - python - 十进制'点'到'逗号',使用2个小数
- load-testing - 如何在 Locust 负载测试工具中计算每秒的实际请求数
- javascript - 页面分页总是显示第一个元素 React JS