Почему я получаю нулевые значения при использовании gson для анализа json объекта в android studio? - PullRequest
0 голосов
/ 12 февраля 2020

Я читаю в следующем JSON и использую GSON для преобразования его в объект, который я затем могу использовать для доступа к свойствам указанного объекта, чтобы помочь отображать изображения в моем приложении.

Однако одно из поля, которое я хочу использовать, imageURL, возвращает нулевые значения. Глядя на json (ссылка ниже), мы ясно видим, что он не равен нулю.

https://api.letsbuildthatapp.com/youtube/home_feed

Я использовал отладчик для демонстрации нуля значение, которое я получаю для каждого imageURL:

Вывод отладчика

Таким образом, объект дает мне нулевые значения для imageURL, но ссылка - нет. Что происходит?

Вот функция, которую я написал для извлечения и анализа объекта JSON:

private fun fetchJson() {
        println("Attempting to fetch JSON")

        val url = "https://api.letsbuildthatapp.com/youtube/home_feed"
        val request = Request.Builder().url(url).build()
        val client = OkHttpClient()

        client.newCall(request).enqueue(object : Callback {
            override fun onResponse(call: Call, response: Response) {
                val body = response.body?.string()
                println(body)

                val gson = GsonBuilder().create()

                val homeFeed = gson.fromJson(body, HomeFeed::class.java)

                runOnUiThread {
                    recyclerView_main.adapter = MainAdapter(homeFeed)
                }
            }

            override fun onFailure(call: Call, e: IOException) {
                println("failed to execute request")
            }
        }
         )

    }

Мой класс HomeFeed выглядит следующим образом:


class HomeFeed(val videos: List<Video>)

class Video(val id: Int, val name: String, val link: String, val imageURL: String, numberOfViews: Int,
            val channel: Channel)

class Channel(val name: String, val profileImageUrl: String)

Я считаю, что это должно быть достаточно подробно, но если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Спасибо.

1 Ответ

1 голос
/ 12 февраля 2020

Попробуйте с этим объектом, вы должны использовать то же имя для vals, "imageUrl" вместо "imageURL":

data class HomeFeed(
    val user: User,
    val videos: List<Video>
)

data class User(
    val id: Int,
    val name: String,
    val username: String
)

data class Video(
    val channel: Channel,
    val id: Int,
    val imageUrl: String,
    val link: String,
    val name: String,
    val numberOfViews: Int
)

data class Channel(
    val name: String,
    val numberOfSubscribers: Int,
    val profileImageUrl: String
)
...