如何从json解析数据

时间:2019-01-25 03:44:07

标签: android json httprequest

我试图解析json数据,但这有点奇怪,因为它没有显示正确的数据,但是如果我尝试在浏览器上调用json,它就具有正确的数据。

所以这就是我解析json数据的方式

doAsync {
        val url = localhost.getMovie()
        val request = okhttp3.Request.Builder().url(url).build()
        val client = OkHttpClient()

        uiThread {
            client.newCall(request).enqueue(object : Callback, okhttp3.Callback {
                override fun onResponse(call: okhttp3.Call?, response: okhttp3.Response?) {
                    val body = response?.body()?.string()
                    println(body)
                    uiThread {
                        val gson = GsonBuilder().create()
                        val movieFeed = gson.fromJson(body, Movie2Response::class.java)

                        Log.v("body", ""+body)
                        Log.v("feed", ""+movieFeed.data)

                        uiThread {
                        }
                    }
                }

                override fun onFailure(call: okhttp3.Call?, e: IOException) {
                    println("failed")
                }

            })
        }
    }

电影响应

class Movie2Response (val data: MutableList<Movie2>)

电影

class Movie2 (
    @SerializedName("id")
    var movieId: String? = null,
    @SerializedName("description")
    var synopsis: String? = null,
    @SerializedName("release_date")
    var release: String? = null,
    @SerializedName("poster")
    var poster: String? = null,
    @SerializedName("genre")
    var genre: String? = null,
    @SerializedName("title")
    var title: String? = null

这就是我从json数据中得到的

 V/body: {"data":[{"title":"Aquaman","description":""........
V/feed: [com.mqa.android.moviereview.model.Movie2@7509e04, com.mqa.android.moviereview.model.Movie2@890afed, com.mqa.android.moviereview.model.Movie2@9834e22, com.mqa.android.moviereview.model.Movie2@f02d0b3, com.mqa.android.moviereview.model.Movie2@d3b9670, com.mqa.android.moviereview.model.Movie2@4d55de9, com.mqa.android.moviereview.model.Movie2@cac2a6e, com.mqa.android.moviereview.model.Movie2@94fc50f, com.mqa.android.moviereview.model.Movie2@d9ba99c]

它直接显示在主体中,但在数组中显示为那样。请帮助它有什么问题。因为我想向旋转器显示标题数据

2 个答案:

答案 0 :(得分:2)

如日志结果所示,您的代码运行良好。真正的问题是日志功能Log.v("feed", ""+movieFeed.data)。如果要显示漂亮的日志,应通过以下方法覆盖toString()类中的Movie2方法:

  

打开Movie2,然后在editor-> Generate->中单击鼠标右键,然后单击toString()以覆盖它。

对于Kotlin中的数据类,您只需在data关键字之前添加class

enter image description here

答案 1 :(得分:0)

一切正常。您只是忘记添加默认实现来记录该对象。

class Movie2(/*your fields*/)

只需在课前添加数据。会是这样的

data class Movie2(/*your fields*/)

科特琳不知道将Movie2串起来。如果您想使用默认实现,请使用data class