Сортировка данных из JSON в Котлин - PullRequest
0 голосов
/ 29 августа 2018

У меня есть данные из файла json, которые я отображаю в утилите в моем приложении. Я пытаюсь отсортировать эти данные по году . Вот так выглядит мой код:

В 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
)

Он не показывает никаких ошибок или предупреждений, он просто ничего не делает. Как я мог этого добиться?

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Если вы хотите отсортировать список по возрастанию на год, вы можете сделать это:

val sortedStandUps = homeFeed.standups.sortedBy { it.year }

Если вы хотите отсортировать список по убыванию, сделайте это:

val sortedStandUps = homeFeed.standups.sortedByDescending { it.year }
0 голосов
/ 29 августа 2018

Вы должны сначала сохранить отсортированный список в другой переменной, а затем использовать эту переменную, чтобы передать его в adapter

val homeFeed = gson.fromJson(body, HomeFeed::class.java)
            val sortedHomeFeed = homeFeed.standups.sortedWith(compareBy({it.year}))

            runOnUiThread {
                rv.adapter = Adapter(sortedHomeFeed)
            }

Причина этого в том, что в первоначальный список не внесены изменения, следуя принципам неизменности.

0 голосов
/ 29 августа 2018

Kotlin дает вам легкую сортировку. Jus, как показано ниже

сделать временный объект (т. Е.), TempFilterData здесь

val standUps = tempFilterData?.sortedWith(compareBy({ it.Year }))

Теперь вы можете получить отсортированные данные по ГОДУ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...